自从我去年开始学习F#和OCaml以来,我已经阅读了大量的文章,这些文章坚持认为设计模式(特别是Java)是命令式语言中缺少的功能的变通方法.我发现的一篇文章提出了相当强烈的主张:
我遇到过的大多数人都读过Gang of Four的"设计模式"一书.任何自尊的程序员都会告诉你,这本书与语言无关,而且无论你使用哪种语言,这些模式都适用于软件工程.这是一个崇高的主张.不幸的是,它与事实相去甚远.
功能语言极具表现力.在函数式语言中,人们不需要设计模式,因为语言可能是如此高级,您最终会编写概念,一起消除设计模式.
函数式编程的主要特性包括作为一等值,currying,不可变值等的函数.对我来说,OO设计模式近似于任何这些特性似乎并不明显.
另外,在支持OOP的函数式语言(例如F#和OCaml)中,对我来说很明显,使用这些语言的程序员将使用与其他OOP语言相同的设计模式.事实上,现在我每天都使用F#和OCaml,我在这些语言中使用的模式与我在Java中编写时使用的模式之间没有明显的差异.
功能编程是否消除了对OOP设计模式的需求,是否有任何理由?如果是这样,您是否可以发布或链接到典型OOP设计模式及其功能等效的示例?
我正在寻找monads的创造性用途来学习.我已经读过某些地方,例如在AI中使用monad,但作为monad新手,我看不清楚如何.
请提供源代码和示例用法的链接.请不要标准单子.
是否已经有任何Scala等语言的最佳实践集合?
我找到了关于函数式语言的设计模式,功能性战略编程的设计模式的工作.有OO语言的GoF设计模式.但功能性OO混合动力车是否有任何模式?我所看到的只是这个清单.什么是已知的?
我刚刚阅读了monad的创意使用文章,其中包含非常有趣的想法和参考资料,所以我很好奇:箭头怎么样?我不是在寻找关于基础知识或"标准"用途的个人观点或参考资料(如monads vs箭头或帮助理解haskell中的箭头),而是寻找智能和/或非平凡应用程序的参考列表(也许在研究论文?).谢谢.