gpt4 book ai didi

Clojure:基于条件重复值的惯用方法

转载 作者:行者123 更新时间:2023-12-02 17:22:21 25 4
gpt4 key购买 nike

由于 recur 只能在尾部位置使用,因此如何使用依赖于嵌套条件的值进行 recur?这是一个例子:

(loop [a (rand-int) b 0]
(if (< a 300)
(recur (rand-int) 1))
(if (a < 10000)
(recur (rand-int) 5))
b)

问题是循环不会发生在尾部位置。那么我如何循环使用取决于内部条件的新值。我可以做一个引用并在条件中交换它,然后在尾部位置重复,但是有没有办法在没有值突变的情况下做到这一点?

最佳答案

递归可以全部位于尾部位置:

(loop [a (rand-int 20000) b 0]
(if (< a 300)
(recur (rand-int 20000) 1)
(if (< a 10000)
(recur (rand-int 20000) 5)
b)))

或者也许更具可读性:

(loop [a (rand-int 20000) b 0]
(cond
(< a 300) (recur (rand-int 20000) 1)
(< a 10000) (recur (rand-int 20000) 5)
:default b))

关于Clojure:基于条件重复值的惯用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26004568/

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