如何在没有任何库导入的情况下在Haskell中创建随机整数列表(例如System.random)?

时间:2018-01-29 00:59:09

标签: haskell

对于类似于我的问题,有几个很好的答案,但所有这些问题(我试图尽可能多地使用它们)都使用System.random库。在Haskell中编写代码以创建包含没有此类库的随机整数的列表有什么好主意?我认为在使用System.random时了解幕后发生的事情很有趣。

1 个答案:

答案 0 :(得分:1)

前奏中没有暴露熵的来源,因此只使用前奏来制作随机数的唯一方法是随机性来自其他地方。您可以阅读自己的外部熵源,或使用现有的熵/dev/urandom。在二进制模式下打开/dev/urandom以正确阅读它会偏离前缀System.IO(或更好Data.Bytestring)。

如果没有System.IO,您可以将自己约束到您理解井的表示的unicode字符集部分。对我来说,'a''p'的小写字母为0x610x70

randomNibbles :: IO [Int]
randomNibbles = map (`mod` 16) . filter (> 6 * 16) . filter (<= 7*16) . map fromEnum <$> readFile "/dev/urandom"

从根本上说,从外部世界获取熵的唯一方法是通过I / O来观察外部世界。