gpt4 book ai didi

haskell - 为什么 State 需要一个值?

转载 作者:行者123 更新时间:2023-12-04 00:15:36 25 4
gpt4 key购买 nike

刚刚从这个优秀的 tutorial 中了解了 State monad .然而,当我试图向一个非程序员解释它时,他们有一个问题难倒了我。

如果 State 的目的是模拟可变内存,那么 state monad 存储的函数为什么是这样的类型:

s -> (a, s)

而不仅仅是:
s -> s

换句话说,对于“中间”值的需求是什么?例如,在我们需要它的情况下,我们不能通过简单地将状态定义为 (state, value) 的元组来模拟它吗? ?

我确定我混淆了一些东西,任何帮助表示赞赏。

最佳答案

为了与 C 等命令式语言进行比较,s -> s对应于返回类型为 void 的函数,这纯粹是为了副作用(例如改变内存)而调用的。它与 State s () 同构.

实际上,可以编写仅通过全局变量进行通信的 C 函数。但是,就像在 C 中一样,从函数返回值通常很方便。就是这样 a是为了。

当然,对于您的特定问题,s -> s 是可能的是更好的选择。虽然它不是 Monad,但它是 Monoid(包裹在 Endo 中时)。所以你可以使用 <> 来构造这样的函数。和 mempty ,对应于 >>=return的单子(monad)。

关于haskell - 为什么 State 需要一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11583489/

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