我的印象是,在启动Scheme时,randomize
程序以当前时间作为其种子被调用。但是,如果我有一个仅由(print (random 10))
组成的Scheme脚本,我收到的唯一输出是7
;没有其他号码。那么,我做错了什么?为了记录,我正在使用Chicken Scheme。
答案 0 :(得分:0)
你正在使用什么随机库?根据{{3}}您对random
播种的假设是正确的:
(randomize [SEED])
:设置随机数种子。如果未提供SEED(精确整数),则使用当前时间。在启动时(初始化Unit extras时),使用当前时间初始化随机数生成器。
(random N)
:返回[0,N-1]中的伪随机整数。 N是整数。
另请注意警告,特别是第二个似乎可以解释您正在目击的行为的警告:
警告:此过程在内部使用rand(3)并显示其缺陷,包括低质量的伪随机性:
- 在Windows和Solaris上,只能在[0,N-1]范围内生成32768个唯一随机值。如果N> = 32768,则结果集中将存在间隙。
- 在Mac OS X,Windows和其他一些平台上,附近种子的输出变化很小。由于随机生成器在启动时以current-seconds播种,因此新进程可能会在一分钟内看到相似或相同的随机序列。
- 在Linux上,rand(3)是random(3)的别名,它提供了合理质量的输出。