为了更好地学习Haskell,我试图编写一个程序,显示2个die的总和的平均值,滚动X次.这在C,Java,Python中相当简单......但我陷入了Haskell.这是一个天真的尝试:
import System.Random
main = do
g <- getStdGen
let trials = 10000000
let rolls = take trials (randomRs (2, 12) g :: [Int])
let average = div (sum rolls) trials
print average
Run Code Online (Sandbox Code Playgroud)
对于少量试验,该计划有效.但是当我用一千万次试验运行这段代码时,我收到一个错误:
Stack space overflow: current size 8388608 bytes.
Use `+RTS -Ksize -RTS' to increase it.
Run Code Online (Sandbox Code Playgroud)
编写这个程序必须有更好的方法.在C,Java和Python版本中,这是一项简单的任务.我看过这篇文章(并了解了大约75%的材料),但是当我将这些代码调整到这种情况时,总结一系列R [Int]不起作用(我不知道如何'打开'[ INT]).我究竟做错了什么?什么是正确的方法?如何在Haskell中获得随机数启示?
编辑:除了选择的答案之外,正如rtperson所指出的那样,2个骰子的建模是不正确的; 它应该是从1到6的两个独立卷的总和.