如何在Scheme中正确播种随机函数?

时间:2013-01-11 16:05:00

标签: random scheme chicken-scheme

我的印象是,在启动Scheme时,randomize程序以当前时间作为其种子被调用。但是,如果我有一个仅由(print (random 10))组成的Scheme脚本,我收到的唯一输出是7;没有其他号码。那么,我做错了什么?为了记录,我正在使用Chicken Scheme。

1 个答案:

答案 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)的别名,它提供了合理质量的输出。
  •