目前cons的行为如下:
(cons '(1 2) '(3))
;=> ((1 2) 3)
我希望实现以下目标:
(magic-cons '(1 2) '(3))
;=> (1 2 3)
我还没有找到相关资源,但这似乎很简单,我觉得应该有一个内置函数。
或者我不知道如何描述这种情况。 无论哪种方式,请告诉我。谢谢!
编辑:请不要用“flatten”回答:P
(flatten (cons '(1 2) '(3)))
你需要使用concat
函数:
clojure.core/concat
([] [x] [x y] [x y & zs])
Returns a lazy seq representing the concatenation of the elements in the supplied colls.
使用示例:
user> (concat '(1 2) '(3))
(1 2 3)
我相信您正在寻找concat函数(意为“连接列表”):
[Concat] 返回一个惰性序列,表示所提供的colls中元素的连接。
在这种情况下,用法如下:
(concat '(1 2) '(3))
concat
生成一个惰性序列。请参见如何在Clojure中将惰性序列转换为非惰性序列?以了解如何“强制”序列(这可能有用/需要,具体取决于更大的上下文,但请牢记这一点)。=> (into [2 4] '(1 2 3))
[2 4 1 2 3]
(into '(2 4) '(1 2 3))
(3 2 1 2 4)
into
可能会改变项目的顺序,就像上面第二个调用一样。 - Tim Smith
cons
,它代表“构建”。它将新元素逐个添加到列表的开头来构建列表。你正在寻找的那种函数应该将一个列表中的所有元素附加到另一个列表或者只是连接两个列表。因此,在 Common Lisp 中它被称为append
,而在 Clojure 中,正如其他人已经在这里提到的,它被称为concat
。 - ffriend