gpt4 book ai didi

recursion - clojure 递归 conj 列表

转载 作者:太空宇宙 更新时间:2023-11-03 19:00:33 25 4
gpt4 key购买 nike

((fn foo [x] (when (> x 0) (conj (foo (dec x)) x))) 5)

对于这段代码,结果是 [5 4 3 2 1]为什么不是 [1,2,3,4,5]?我看到我们从递归 foo 调用的结果中确定了一个值。因为我认为它应该是 1 2 3 4 5?需要帮助才能理解这一点。谢谢。

最佳答案

来自conj的文档:

clojure.core/conj
([coll x] [coll x & xs])
conj[oin]. Returns a new collection with the xs
'added'. (conj nil item) returns (item). The 'addition' may
happen at different 'places' depending on the concrete type.

您的函数的终止条件产生 nil,因为测试是 when。所以最深的 conj 调用将是:

(conj nil 1)
(1) <-- a list

下一个:

(conj (conj nil 1) 2)
(2 1)

因此您的结果将按降序排列,因为 conj 附加在列表的前面。如果您希望它按递增顺序排列,请从这样的空向量开始:

((fn foo [x] (if (> x 0) (conj (foo (dec x)) x) [])) 5)
[1 2 3 4 5]

关于recursion - clojure 递归 conj 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31790557/

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