2
在许多情况下,我想通过递归函数做出列表,我找不到正确的方式如何做到这一点。如何通过递归进行列表?
例如(不是有用但最短我可以找到)我想从列表中逐个获取元素并创建与第一个列表相同的新列表。
(defn f [x] (list
(first x)
(if (not= (rest x) '())
(f (rest x))
'()
)))
(f '(1 2 3))
我想
(1 2 3)
,但我得到
(1 (2 (3())))
我想不使用压平。 例如,这种输入
(f '([1 1] [2 2] [3 3]))
将被夷为平地。
不应该有“y必须是列表”而不是“y应该是列表”? (0 1) (cons 1 1) java.lang.IllegalArgumentException:不知道如何创建ISeq:java.lang.Integer(NO_SOURCE_FILE:0) (cons 1 [1]) (11) – boucekv 2013-02-18 11:14:21
@boucekv This取决于Lisp的风味。在一些口味中,对可以由两个非零原子组成。 – 2013-02-18 11:29:53
如果传递一个空列表,这将会出现问题。在采用第一个元素之前检查一个空列表会更好:'(if(= x'())'()(cons(first x)(f(rest x))))'。 – 6502 2013-02-18 14:12:48