我已经学过几篇文章,关于FP的书籍的一些章节,我想练习它以使FP范式成为我心中的一部分。但我仍然无法得到它,而且很容易怀疑自己。
答案 0 :(得分:3)
要接受函数式编程,必须停止将变量视为可以反复更改其值的内存位置。相反,将您的数据视为一个不可变的块,它被输入函数,产生另一个不可变的数据块。如果您使用过UNIX(或DOS)pipelines,那么它们就是这样工作的。目标是将一系列函数链接在一起,将所提供的输入转换为所需的输出。
为了实践这一点,我建议用您选择的函数式语言解决Project Euler个问题。如果你还没有选择一种语言,Haskell提供的非功能性干扰比大多数语言少。但是,请咨询another SO question以获得更多选择。
在构建一些功能管道之后,您会很快发现您希望将功能放在一起,而不是简单链接。这是更高级别的功能发挥作用的地方,涉及映射,折叠和 currying 等概念。在使用这些概念之后,您可能会开始想象更高级别的抽象,例如 monad 和提升。
这一进展的关键是确保在解决练习问题时限制自己的功能风格。一种方法是强迫自己仅使用tacit (or point-free)表单来表达解决方案。
答案 1 :(得分:1)
http://msdn.microsoft.com/en-us/library/bb669144.aspx
提供有关程序编程差异的一些细节。
你可能想查看Douglas R Hofstadter的更多(流行)阅读,他已经有一些关于函数式编程语言LISP的书籍。
D.R.“Goedel,Escher,Bach” Hofstadter,当然还有Metamagical Themas,其中包括一个关于递归的章节,以及Lisp中河内塔的解决方案。我十几岁时读到的东西让我开始编程。答案 2 :(得分:1)
针对初学者程序员的书籍教授函数式编程的概念和基础知识以及特定的编程语言。书籍是我进入Lisp,ML / OCAML和Haskell的途径。
我不确定这是一个心态问题。有些问题在纯函数中有更清晰的解决方案,在纯OO等中有其他问题。这就是为什么许多主流编程语言正在演变成多范式系统。
个人意见(这里不喜欢的东西)是在Python,C#或Java中比在Haskell或OCAML中执行statefull OO更容易。在开始掌握 Monads 的概念和应用之前,有几个箍要跳。
答案 3 :(得分:0)
你可以从Felleisen等人的“如何设计程序”开始。它的目标是解决问题,IIUC这就是你所追求的目标。