Clojure:使用基于条件的值重复出现的惯用方法
由于recur只能在尾部位置使用,如何使用依赖于嵌套条件的值进行recur?以下是一个例子:Clojure:使用基于条件的值重复出现的惯用方法,clojure,Clojure,由于recur只能在尾部位置使用,如何使用依赖于嵌套条件的值进行recur?以下是一个例子: (loop [a (rand-int) b 0] (if (< a 300) (recur (rand-int) 1)) (if (a < 10000) (recur (rand-int) 5)) b) (循环[a(rand int)b0] (如果(
(loop [a (rand-int) b 0]
(if (< a 300)
(recur (rand-int) 1))
(if (a < 10000)
(recur (rand-int) 5))
b)
(循环[a(rand int)b0]
(如果(
问题是递归不会发生在尾部位置。那么,如何使用依赖于内部条件的新值进行循环呢。我可以创建一个引用并在条件中交换它,然后在尾部位置重复出现,但是有没有一种方法可以在不改变值的情况下进行呢 递归可以全部处于尾部位置:
(loop [a (rand-int 20000) b 0]
(if (< a 300)
(recur (rand-int 20000) 1)
(if (< a 10000)
(recur (rand-int 20000) 5)
b)))
(循环[a(rand int 20000)b0]
(如果(
或者更具可读性:
(loop [a (rand-int 20000) b 0]
(cond
(< a 300) (recur (rand-int 20000) 1)
(< a 10000) (recur (rand-int 20000) 5)
:default b))
(循环[a(rand int 20000)b0]
(续)
(