gpt4 book ai didi

clojure - Clojure 中的递归

转载 作者:行者123 更新时间:2023-12-02 05:40:50 25 4
gpt4 key购买 nike

我正在尝试让这个示例程序正常工作

(defn foo
([x] (foo x []))
([x current]
(when (> x 0)
(recur (dec x) (conj current x)))))

当我调用这个函数 (foo 5) 时,我应该得到 [1 2 3 4 5],但它只返回 nil。我做错了什么?

谢谢,穆尔塔扎

最佳答案

您的递归没有返回表达式,即当 when 为 false 时,递归终止并返回 nil。您可以使用 if 解决此问题:

(defn foo
([x] (foo x []))
([x current]
(if (> x 0)
(recur (dec x) (conj current x))
current)))

这将为 (foo 5) 返回 [5 4 3 2 1] 因为您使用 vector 作为返回值并且 conj vector 将项目附加到向量的末尾。您可以反转矢量或使用列表,即代替 (foo x []) 使用 (foo x '())

关于clojure - Clojure 中的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10995396/

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