当我搜索SICP第2版的书时,我找不到“Monad
”这个词。 SICP的哪些概念(或章节)与Monad有关?
答案 0 :(得分:5)
SICP中没有任何内容明确地解释monad:这本书是在任何人将monad的概念形式化之前很久才编写的,因为它与计算机编程有关(忽略monad的数学概念,这是另一回事)。但是,书中的一些东西无论如何都是monadic:例如,无论你是否知道,列表都是monad。
答案 1 :(得分:1)
SICP使用Scheme。 Scheme允许将任意动作链接在一起。没有什么能阻止你这样做。换句话说,你基本上是在做任何monad的工作。而且,在像Lisp这样的多范式语言中,它们往往不是那么有用或不具有这种语言(我认为,Scheme并不偏袒任何一方;它通过使用后缀禁止突变来避免变异,&#34 ;!"。)
在Haskell中,您编写的程序类型限制了在所述函数中可能发生的操作类型。使一个实例monadic允许你组合函数有一些限制(关于类型,以及程序员必须处理的monad定律)。你可以使用变形金刚叠加效果。
因此,monad在像Scheme这样的语言设置中没有那么有用。正如Amalloy正确地说的那样,他们当时也没有发明过它们。
编辑1:对第一段的澄清。你可以在Lisp中使用monad(一种不纯的语言),只是你没有类型系统来确保你没有混合效果。我在IO
monad(Racket + functional / better-monads)中使用了List
这就是说,monad设计模式非常有用,就像使用Maybe
和List
一样正如亚历克西斯·金指出的那样,在Clojure / Racket中。