我是函数式编程的新手。在学习Monads的教程时,我把它看作是OOP中的Decorator pattern的类比。我说的对吗?或者有没有类似Monad的设计模式?
发布于 2012-09-04 21:17:08
Monad绝对不是装饰者。通常没有一个标准的OOP模式是monads的直接类比。尽管您可以在OOP中很好地实现monads,但请参见:
我所知道的最好的基于Clojure的monad教程是Brian Marick的这个视频系列:
我建议从头到尾看一遍--这是一个非常好的介绍,有很多例子。
发布于 2012-09-04 21:28:46
您可以开始将monad看作是“可覆盖的分号”,这是由于Haskell中已知的语法糖分。
一般来说,这确实意味着您可以使用相同的控制结构(代码块)来做不同的事情,这取决于当前使用的monad
Haskell中的qick示例
import Data.Maybe
import Data.List
funcMaybe x = do
z <- x
return $ z * z
funcList x = do
z <- x
return $ z * z
runMaybe = funcMaybe ( Just 5 )
runList = funcList [ 5, 6 ]在GHCI中执行时,它将提示
ghci> runMaybe
Just 25
ghci> runList
[25, 36]如您所见,相同的代码块在一种情况下会产生不同的结果列表,在另一种情况下可能会包装成适当的数据结构
发布于 2012-09-04 17:31:48
Monads就像一个function composition on steroids,在面向对象的世界中没有类似的强大概念。
https://stackoverflow.com/questions/12259758
复制相似问题