gpt4 book ai didi

haskell - 卡在 Haskell Wiki 中的 State Monad 示例中

转载 作者:行者123 更新时间:2023-12-02 15:28:28 24 4
gpt4 key购买 nike

我正在学习 State Monad,无法理解 Wiki 中的一个示例 (http://en.wikibooks.org/wiki/Haskell/Understanding_monads/State)

rollDie :: GeneratorState Int
rollDie = do generator <- get
let (value, newGenerator) = randomR (1,6) generator
put newGenerator
return value

put有定义

put newState = State $ \_ -> ((), newState)

好像put只需创建一个新的 State ,这条线的真正用途是什么?如果想使用该值也许应该使用 <-提取,如果想使用 state再次应该使用 get .如果删除这一行(或者我遗漏了什么?)没有区别,那么,这一行到底是什么意思?

最佳答案

删除 put 并获得一些随机值。我预测您将始终获得相同的“随机值”。这就是 haskell 中随机生成器的工作原理:它(即 randomR)是一个纯函数 - 给定相同的生成器,它将始终返回相同的结果。您必须将 newGenerator 提供给下一个调用。这是通过 put 完成的。

关于haskell - 卡在 Haskell Wiki 中的 State Monad 示例中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29141233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com