Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 如何通过递归生成列表?_Clojure_Lisp - Fatal编程技术网

Clojure 如何通过递归生成列表?

Clojure 如何通过递归生成列表?,clojure,lisp,Clojure,Lisp,在很多情况下,我想通过递归函数来制作列表,但我找不到正确的方法 例如,我想从列表中一个接一个地提取元素,并创建与第一个列表相同的新列表 (defn f [x] (list (first x) (if (not= (rest x) '()) (f (rest x)) '() ))) (f '(1 2 3)) 我想去 (1 2 3) 但我明白了 (1 (2 (3 ()))) 我不想用压扁。 例如

在很多情况下,我想通过递归函数来制作列表,但我找不到正确的方法

例如,我想从列表中一个接一个地提取元素,并创建与第一个列表相同的新列表

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

将被展平销毁。

列表
替换为
cons

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

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

cons
替换
list

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

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

不应该有“y必须是列表”而不是“y应该是列表”吗?(cons 1 1)java.lang.IllegalArgumentException:不知道如何从以下文件创建ISeq:java.lang.Integer(无源文件:0)(cons 1[1])(1 1 1)@boucekv这取决于Lisp风格。在某些风格中,对可能由两个非空原子组成。如果传递的是空列表,则会出现问题。最好在获取第一个元素之前检查空列表:
(if(=x'())()(cons(first x)(f(rest x)))
。不应该有“y必须是列表”而不是“y应该是列表”吗?(cons 1 1)java.lang.IllegalArgumentException:不知道如何从以下文件创建ISeq:java.lang.Integer(无源文件:0)(cons 1[1])(1 1 1)@boucekv这取决于Lisp风格。在某些风格中,对可能由两个非空原子组成。如果传递的是空列表,则会出现问题。最好在获取第一个元素之前检查空列表:
(if(=x'())()(cons(first x)(f(rest x)))