nor*_*tpy 1 clojure clojurescript
我是clojure/clojurescript的新手,并试图找出为什么这个函数总是返回100作为第一个随机整数和最后几个零:
(take 10 (iterate rand-int 100))
;; (100 30 19 15 4 3 2 0 0 0)
Run Code Online (Sandbox Code Playgroud)
但这可以按预期工作:
(take 10 (repeatedly #(rand-int 100)))
;; (14 14 16 92 10 69 85 74 65 95)
Run Code Online (Sandbox Code Playgroud)
但是如果我使用匿名fn,iterate
我得到nil
第一个值,但其余的看起来没问题:
(take 10 (iterate #(rand-int 100)))
;; (nil 27 19 76 70 40 63 72 32 55)
Run Code Online (Sandbox Code Playgroud)
Lee*_*Lee 13
iterate
返回序列,(x (f x) (f (f x)) ...)
以便第一个元素是100
您提供的.第二个元素的结果是(rand-int 100)
返回范围中的随机数(0, 99]
.在这种情况下,它返回30
所以第三个元素的结果(rand-int 30)
返回范围中的元素(0, 29]
.由于范围正在减小,所生成的数字迅速接近0.
相反,repeatedly
返回序列((f) (f) (f)...)
,其中f
是无参数的函数,例如#(rand-int 100)
生成数字的范围始终如此(0, 99]
.f
预计会产生一些副作用(修改随机数发生器的状态)