gpt4 book ai didi

带有可变参数函数的Clojure尾调用递归

转载 作者:行者123 更新时间:2023-12-05 00:01:51 25 4
gpt4 key购买 nike

我基本上想要这个:

(defn mymax
([a b] (if (> a b) a b))
([a b & rest] (apply recur (conj rest (mymax a b)))))

所以: (mymax 1 2 3 4)尾调用 (mymax 2 3 4)哪个尾部调用 (mymax 3 4)
我看到“应用”停止重复出现在尾部位置的问题,这意味着它不起作用。但我不明白我如何不能使用 apply 变量论证函数

[注意,我知道您可以使用 reduce 解决这个特殊问题。只是想知道您是否可以使用变量参数进行尾调用递归]

最佳答案

使函数将单个向量作为参数,而不是使用参数作为值的序列。这将使您摆脱申请。

(defn mymax [[a b & rest]]
(let [m (if (> a b) a b)]
(if (not rest)
m
(recur (conj rest m)))))

关于带有可变参数函数的Clojure尾调用递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8775594/

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