最佳答案
我通过 在48小时内给自己写一个计划工作(我大约85小时) ,我已经得到了关于 添加变量和赋值的部分。在本章中有一个很大的概念跳跃,我希望它是在两个步骤中完成的,中间有一个良好的重构,而不是直接跳到最终的解决方案。不管怎样。
我已经迷失在一些不同的类,似乎服务于相同的目的: State
,ST
,IORef
,和 MVar
。文中提到了前三个问题,而最后一个问题似乎是关于前三个问题的许多 StackOverflow 问题的最佳答案。它们似乎都在连续调用之间带有一种状态。
这些都是什么? 它们彼此之间有什么不同?
特别是这些句子没有意义:
相反,我们使用一个称为 状态线程的特性,让 Haskell 为我们管理聚合状态。这使我们可以像对待其他编程语言一样对待可变变量,使用函数来获取或设置变量。
还有
IORef 模块允许使用有状态变量 在 IO 单子内。
所有这些都使得行 type ENV = IORef [(String, IORef LispVal)]
令人困惑-为什么是第二个 IORef
? 如果我改写为 type ENV = State [(String, LispVal)]
将会破坏什么?