当使用 YAP 执行以下 Prolog 程序时,输出始终相同,即整数 233。
:- use_module(library(random)).
x:- random(1,1000,X), writeln(X).
例如,如果我执行以下 bash 脚本,输出始终是相同的整数 (233)。
for k in `seq 0`
do
yap -l test.pl << %
x.
%
done
如果我使用 swipl 重复此过程,则每次输出都会不同,即随机的。
谁能解释一下吗?
最佳答案
要事第一!
出于许多充分的原因(过去结果的可重复性是最重要的),计算机程序不使用实际随机数,而是使用伪随机数。
PRNG 是完全确定性的函数,给定与初始化相同的内部状态(也称为“种子”),会产生完全相同的数字序列(从现在到永恒)。
快速修复:找到合适的种子(日期、时间、月相……)并使用该种子显式初始化 PRNG。记录种子,以便您以后可以确定地重新运行过去的实验。
关于random - YAP Prolog random 缺乏随机性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33021564/