gpt4 book ai didi

recursion - Clojure 递归是否向后工作?

转载 作者:行者123 更新时间:2023-12-02 23:53:19 25 4
gpt4 key购买 nike

我目前正在浏览 4clojure Problem 23

我当前的解决方案使用递归来遍历列表并将每个元素附加到同一函数结果的末尾:

(fn self [x] (if (= x []) 
x
(conj (self (rest x)) (first x))
))

但是当我针对 [1 2 3] 运行它时,它给了我 (1 2 3)
我认为它应该通过递归做的是:

(conj (conj (conj (conj (conj [] 5) 4) 3) 2) 1)

它确实返回

[5 4 3 2 1]

但事实恰恰相反,所以我一定错过了一些东西。另外,我不明白为什么一个返回向量而另一个返回列表。

最佳答案

当你执行(rest v)时,你会得到一个列表(不是向量),然后 conj 每次都会附加到前面(而不是后面):

user=> (defn self [v] (if (empty? v) v (conj (self (rest v)) (first v))))
#'user/self
user=> (self [1 2 3])
(1 2 3)
user=> (defn self [v] (if (empty? v) [] (conj (self (rest v)) (first v))))
#'user/self
user=> (self [1 2 3])
[3 2 1]
user=>
user=> (rest [1])
()
user=> (conj '() 2)
(2)
user=> (conj '(2) 1)
(1 2)
user=>

关于recursion - Clojure 递归是否向后工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13574570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com