小编ben*_*son的帖子

Haskell中大量骰子卷的平均值

为了更好地学习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的两个独立卷的总和.

random haskell functional-programming

4
推荐指数
1
解决办法
690
查看次数

标签 统计

functional-programming ×1

haskell ×1

random ×1