我正在通过48小时为自己编写一个方案(我大约85小时)而且我已经完成了关于添加变量和赋值的部分.本章中有一个很大的概念性跳跃,我希望它分两步完成,两者之间有很好的重构,而不是直接跳到最终的解决方案.无论如何…
我已经得到了一些不同类的,似乎达到相同的目的失去了:State,ST,IORef,和MVar.文本中提到了前三个,而最后三个似乎是许多关于前三个问题的StackOverflow问题的最佳答案.它们似乎在连续调用之间都处于状态.
这些是什么以及它们如何彼此不同?
特别是这些句子没有意义:
相反,我们使用一个名为状态线程的功能,让Haskell为我们管理聚合状态.这使我们可以像在任何其他编程语言中一样处理可变变量,使用函数来获取或设置变量.
和
IORef模块允许您在IO monad中使用有状态变量.
所有这一切都使这条线路type ENV = IORef [(String, IORef LispVal)]混乱 - 为什么第二个IORef呢?如果我写的话会破坏什么type ENV = State [(String, LispVal)]?
Haskell是一种纯函数式编程语言.
我的问题是:使用Haskell解决涉及大量状态的问题有 哪些优点和缺点,例如GUI编程或游戏编程?
还有一个次要问题:有哪些方法以功能方式处理状态?
提前致谢.
我想编写一个函数来计算平均值,使用状态Monad in haskell这是我写的代码
import Control.Monad.State
type MyState = (Double,Double)
media s (a,n)= ((a*n+s)/(n+1),n+1)
getAverage:: Double ->State MyState s1-> Double
getAverage s c=get >>= \s0 -> let (x,s1) =media s s0
in put s1 >> return x
Run Code Online (Sandbox Code Playgroud)
我在GHCI编译时遇到这个错误,我坚持在那里你可以帮我理解什么是错的,提前谢谢你