当我搜索SICP第二版时,找不到单词"Monad
"。SICP的哪个概念(或章节)与莫纳德有关?
SICP中没有任何内容明确提到monad:这本书早在任何人正式化monad的概念之前就已经写了,因为它与计算机编程有关(这里忽略了monad的数学思想,这是另一回事)。但是,书中的一些东西无论如何都是一元的:例如,无论你是否知道,列表都是一个一元的。
在Haskell中,您编写的程序的类型限制了所述函数中可能发生的操作类型。制作一个实例monadic可以让您编写有一些限制的函数(关于类型,以及程序员必须注意的monad定律)。你可以使用变形金刚叠加效果。
因此,monad在Scheme这样的语言环境中并没有那么有用。正如Amalloy正确地说的那样,它们也不是当时发明的。
第1版:对第一段的澄清。你可以在Lisp(一种不纯的语言)中使用monad,只是你没有确保你没有混合效果的类型系统。我在List
monad中使用了IO
(Racket+functional/better monad)。也就是说,正如Alexis King所指出的,monad设计模式可能非常有用,就像在Clojure/Racket中使用Maybe
和List
一样。
第2版:对于State和ST(这可能是你在大多数用例中看到的,因为许多(大多数?)算法都利用了可变性)之类的东西,monad实际上没有多大意义。此外,正如我已经指出的,在大多数Lisp中,您并不能从Haskell中得到您所期望的保证。