我正在48小时内完成“ 编写自己的计划”(我大约需要85小时),并且已经完成了有关添加变量和赋值的部分。本章在概念上有很大的跳跃,我希望它分两步完成,并且在两者之间进行了很好的重构,而不是直接跳转到最终解决方案。无论如何…
我迷路了一些不同类的,似乎达到相同的目的:State
,ST
,IORef
,和MVar
。文本中提到了前三个,而后三个似乎是很多有关前三个的StackOverflow问题的首选答案。它们似乎在连续调用之间都带有状态。
这些分别是什么,它们又有何不同?
这些句子尤其没有意义:
相反,我们使用一种称为状态线程的功能,让Haskell为我们管理聚合状态。这使我们能够像使用任何其他编程语言一样对待可变变量,使用函数来获取或设置变量。
和
IORef模块使您可以在IO monad中使用状态变量。
所有这些使这条线变得type ENV = IORef [(String, IORef LispVal)]
混乱-为什么第二条IORef
呢?如果我改写会type ENV = State [(String, LispVal)]
怎样?