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]))

将被 flatten 破坏。

4

1 回答 1

4

替换listcons

(defn f [x] 
  (cons (first x) 
        (if (not= (rest x) '())
          (f (rest x))
          '())))

操作(list x y)返回两个元素的列表:(x y). 操作(cons x y)返回列表的头部(即第一个元素)x和尾部(列表的其余部分)应该是列表本身的y位置。y

于 2013-02-18T08:52:58.993 回答