在阅读了《了解您的Haskell成就伟大》的I / O一章后,我想澄清一下我对Haskell System.Random
是如何工作的。
据我了解,类型为StdGen
的值的行为类似于生成随机序列的种子。这意味着StdGen
类型不过是一种带标签(但随机)的整数,标签为StdGen
。这样对吗?
同样,getStdGen
向操作系统(或其他可能的东西?)查询起始种子,并且执行该操作的结果存储在gen
中。
每当我尝试打印类型为StdGen
的值时,我都会看到两个较大的整数始终由空格隔开,如下所示。我会想象这个值将是一个整数。那么,空白代表什么呢?
Prelude System.Random> gen <- getStdGen
Prelude System.Random>
Prelude System.Random> gen
751404879 1655838864
Prelude System.Random>
最佳答案
StdGen
只是使用两个种子值的伪随机数生成器。StdGen
的作者决定将其Show实例实现为仅显示两个用空格分隔的种子值,而不是使用更常规的格式。
确切的算法由stdNext
中的System.Random
给出。