由于recur只能用于尾部位置,我如何使用依赖于嵌套条件的值重复?这是一个例子:
(loop [a (rand-int) b 0]
(if (< a 300)
(recur (rand-int) 1))
(if (a < 10000)
(recur (rand-int) 5))
b)
Run Code Online (Sandbox Code Playgroud)
问题是在尾部位置不会发生重复.那么我如何循环一个取决于内部条件的新值.我可以做一个参考并在条件中交换它,然后在尾部位置重复,但是有没有办法在没有值变异的情况下做到这一点?
Dan*_*ero 10
递归都可以处于尾部位置:
(loop [a (rand-int 20000) b 0]
(if (< a 300)
(recur (rand-int 20000) 1)
(if (< a 10000)
(recur (rand-int 20000) 5)
b)))
Run Code Online (Sandbox Code Playgroud)
或者可能更具可读性:
(loop [a (rand-int 20000) b 0]
(cond
(< a 300) (recur (rand-int 20000) 1)
(< a 10000) (recur (rand-int 20000) 5)
:default b))
Run Code Online (Sandbox Code Playgroud)