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

对于这个代码,结果是[5 4 3 2 1]
为什么不是[1,2,3,4,5]?
我看到我们使用值从递归foo调用的结果进行conf。
因为我想应该是12 3 4 5?
需要帮助才能理解这一点。
谢谢。

最佳答案

conj的文档中:
clojure.core/conj公司
([coll x][coll x&xs])
连接返回带有xs的新集合
'已添加'(conj nil item)返回(item)“加法”可以
根据混凝土类型在不同的“地方”发生。
函数的终止条件产生nil,因为测试是一个when因此,最深的联合呼吁将是:

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

10-01 21:32