我正在通過Write Yourself a Scheme in 48 Hours(我達到約85小時)工作,我已經開始了關於Adding Variables and Assignments的部分。這一章有一個很大的概念上的跳躍,我希望它在兩個步驟中完成了重構,而不是直接跳到最後的解決方案。無論如何...State,ST,IORef和MVar之間的差異
我已經迷失了許多不同的類似乎服務於相同的目的:State
,ST
,IORef
和MVar
。文中提到了前三個,而最後一個似乎是關於前三個StackOverflow問題的回答。它們似乎都在連續的調用之間進行狀態。
這些都是什麼,它們又有什麼不同?
特別是這些句子是沒有意義的:
相反,我們使用了一個名爲狀態的線程功能,讓哈斯克爾管理聚集狀態對我們來說。這讓我們可以像使用其他編程語言那樣處理可變變量,使用函數來獲取或設置變量。
和
的IOREF模塊,您可以使用狀態變量的IO單子內。
這一切都使得行混淆 - 爲什麼第二個IORef
?如果我會寫type ENV = State [(String, LispVal)]
,會發生什麼?
在MVars和T中的M是什麼?我猜「可變」,「交易」。有趣的是,ST如何表示狀態線程。 – CMCDragonkai 2015-02-23 10:38:05
爲什麼你說'MVar'應該比'STRef'更受歡迎? 'STRef'保證只有一個線程可以改變它(並且不會發生其他類型的IO) - 當然,如果我不需要併發訪問可變狀態,那肯定會更好? – 2015-03-05 21:39:22
@CMCDragonkai我一直認爲M代表互斥體,但我無法在任何地方找到它。 – 2017-10-09 13:25:00