小编Sep*_*pia的帖子

在Haskell中多次使用相同的随机数

我正在尝试使用Haskell创建一个Paper Scissors Stone游戏来练习我对它的理解.

不幸的是,下面的源代码给出了不必要的答案

例如:

>play pStone pRandom 1
1 games were played. Player 1 won 1 and player 2 won 1, making the match a draw.
Run Code Online (Sandbox Code Playgroud)

如果玩1场比赛,则应该只有1或0胜.

>play pStone pCopy 100
100 games were played. Player 1 won 1 and player 2 won 1, making the match a draw.
Run Code Online (Sandbox Code Playgroud)

如果玩了100场比赛,那么(在第一轮之后)两个都进行相同的动作,那么应该只有1或0胜.

>play pCopy pAntiCopy 100
100 games were played. Player 1 won 31 and player 2 won 37, making player 2 the overall winner.
Run Code Online (Sandbox Code Playgroud)

根据pCopy和pAntiCopy的预期定义,pAntiCopy应该赢得99或100,pCopy应该赢得0或1.

我认为这种行为的最可能原因是随机数在最后进行评估,这意味着应该依赖于相同随机数的2个值依赖于2个单独的随机数.我在上面是否正确?

如果我是对的,请你告诉我如何纠正这个问题?如果我不对,请告诉我问题是什么以及如何解决?

我已经阅读了一个单独问题的解决方案,建议生成一个随机数列表然后使用它们,将它们作为参数传递给主函数中的相关函数.我不相信这会在这里工作得很好,因为所需的随机数的数量可以是0到2*numRounds,取决于所使用的计划(我打算在这个工作时创建更高级的计划)和代码的可读性会进一步降低.

我是Haskell的新手和一般的函数式编程,所以我为下面的源代码风格道歉.如果您对如何改进有任何建议,也欢迎他们.

import …
Run Code Online (Sandbox Code Playgroud)

random monads haskell

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

标签 统计

haskell ×1

monads ×1

random ×1