我正在48 小时内完成为自己编写一个方案(我最多大约 85 小时),并且我已经完成了关于添加变量和分配的部分。本章有一个很大的概念跳跃,我希望它分两步完成,中间有一个很好的重构,而不是直接跳到最终的解决方案。总之……</p>
我迷失了许多似乎服务于相同目的的不同类:State
、ST
、IORef
和MVar
. 前三个在正文中被提及,而最后一个似乎是很多 StackOverflow 关于前三个问题的首选答案。它们似乎都在连续调用之间携带一种状态。
它们各自是什么,它们之间有何不同?
特别是这些句子没有意义:
相反,我们使用一个称为状态线程的特性,让 Haskell 为我们管理聚合状态。这让我们可以像在任何其他编程语言中一样对待可变变量,使用函数来获取或设置变量。
和
IORef 模块允许您在 IO monad中使用有状态变量。
所有这一切都使这条线type ENV = IORef [(String, IORef LispVal)]
令人困惑——为什么是第二条IORef
?如果我改写会破坏什么type ENV = State [(String, LispVal)]
?