gpt4 book ai didi

random - 如何生成相同的伪随机整数序列?

转载 作者:行者123 更新时间:2023-12-03 09:23:33 26 4
gpt4 key购买 nike

在 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)

随机中,重复

  • 捕获函数
  • 捕获Random对象
  • 保存可变的内部状态
  • 种子初始化。

每次调用randomish都会生成一个新的序列对象,其中包含唯一的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)

关于random - 如何生成相同的伪随机整数序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26073686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com