Clojure中是否存在或多或少的标准解决方案来生成相同的伪随机整数序列?如何生成相同的一系列伪随机整数?
我知道三个随机化标准函数:rand
,rand-int
和rand-nth
,但他们似乎没有提供任何方式来'设置'他们的内部状态。
Clojure中是否存在或多或少的标准解决方案来生成相同的伪随机整数序列?如何生成相同的一系列伪随机整数?
我知道三个随机化标准函数:rand
,rand-int
和rand-nth
,但他们似乎没有提供任何方式来'设置'他们的内部状态。
(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)
很好的答案,谢谢! – Mark 2014-09-27 12:00:36
可能重复的[如何生成具有重复兰特随机序列-int](http://stackoverflow.com/questions/24007063/how-to-generated-repeatable-random-sequences-with-rand-int) – jonrsharpe 2014-09-27 10:40:06
[为什么在使用时为什么不重复生成可重复的随机数在Clojure的种子?](http://stackoverflow.com/questions/22441860/why-doesnt-repeatedly-generate-reproducible-random-numbers-when-using-a-seed-in) – jbr 2014-09-27 10:42:30
@jonrsharpe,的确如此是重复的,但引用的问题无论如何都没有正确的答案。 – Mark 2014-09-27 10:42:35