在很多情况下我想通过递归函数制作列表,我找不到正确的方法如何做到这一点。
例如(我没有用,但我找到的最短)我想逐一从列表中获取元素并创建与第一个相同的新列表。
(defn f [x] (list
(first x)
(if (not= (rest x) '())
(f (rest x))
'()
)))
(f '(1 2 3))
我想要
(1 2 3)
但我得到
(1 (2 (3 ())))
我想不要使用flatten。 例如,这个输入
(f '([1 1] [2 2] [3 3]))
将被压扁。
答案 0 :(得分:4)
将list
替换为cons
:
(defn f [x]
(cons (first x)
(if (not= (rest x) '())
(f (rest x))
'())))
操作(list x y)
返回两个元素的列表:(x y)
。操作(cons x y)
返回列表,其中头部(即第一个元素)为x
,尾部(列表的其余部分)为y
,其中y
应列出其自身。