是否有更多或更少的标准解决方案在Clojure中生成相同系列的伪随机整数?
我知道随机化的三个标准函数:rand
,rand-int
和rand-nth
,但它们似乎没有提供任何方法来设置'他们的内部状态。
答案 0 :(得分:4)
(defn randomish [seed]
(repeatedly
(let [gen (java.util.Random. seed)]
(fn [] (.nextInt gen)))))
(take 5 (randomish 10))
;(-1157793070 1913984760 1107254586 1773446580 254270492)
(take 5 (randomish 10))
;(-1157793070 1913984760 1107254586 1773446580 254270492)
在randomish
,repeatedly
Random
对象seed
初始化。 每次调用randomish
都会产生一个包含唯一Random
对象的新序列对象。但具有相同种子的Random
个对象产生相同的序列。
(如果上述错误,请纠正我。possible duplicate似乎很重要。
注意的
在Clojure中,最好拨打.nextLong
而不是nextInt
。
根据要求,适应处理可选(独家)限制:
(defn randomish
([seed]
(repeatedly
(let [gen (java.util.Random. seed)]
(fn [] (.nextInt gen)))))
([seed limit]
(repeatedly
(let [gen (java.util.Random. seed)]
(fn [] (.nextInt gen limit))))))
......生产
(take 5 (randomish 10 100))
;(13 80 93 90 46)
(take 5 (randomish 10 100))
;(13 80 93 90 46)
答案 1 :(得分:0)
只是想为仍在寻找的任何人添加一个东西,自2015年以来,clojars上就有这样做的库:https://github.com/trystan/random-seed