我正在寻找一些可以帮助我学习函数式编程的电子书。我还没有决定使用哪种语言,但我注意到在StackOverflow社区中对LISP,Haskell和F#有相当大的偏见。到目前为止,我不确定我将采取哪个方向,但任何人都可以推荐有关该主题的特定电子书吗?此外,如果有人能够提出一个令人信服的论证,哪种函数语言最有意义,我最感兴趣的是听取你的意见。
我对电子书特别感兴趣,因为我设法为圣诞节索取了一本索尼电子书阅读器,我希望用有用的材料加载它,这是我永无止境的追求成为更好的程序员。
答案 0 :(得分:49)
我建议Haskell。请查看其他问题:Getting Started with Haskell。
支持Haskell的原因:
Lisp也是一个不错的选择。支持Lisp变体的原因:
如果你确实选择了Lisp变体,我推荐Scheme。
我没有使用OCaml或Ruby,但我的一些朋友发誓他们,尽管有人可能会说他们有多么功能。另一方面,他们的“多范式”性质使他们在实践中非常方便。
总而言之,我建议你按照Alan Perlis的建议选择一种语言:“一种不影响编程方式的语言,不值得了解。” Lisp和Haskell都改变了我的世界。我希望无论你选择什么语言,它都会改变你的世界。
答案 1 :(得分:27)
我刚刚开始关注Structure and Interpretation of Computer Programs视频讲座,我觉得它们很精彩。他们采用Scheme作为编程语言,它是LISP的一种变体。但这不是课程的重点:它涉及“计算”的整个概念及其含义。
答案 2 :(得分:15)
函数式编程的最佳教程之一(朋友给了我)是Learn You a Haskell for Great Good!。本教程是关于Haskell的,但其中的基础知识非常好,以正确的顺序呈现。我发现它很清楚。
答案 3 :(得分:8)
显然,这取决于。
您熟悉C#和.Net框架吗?如果是这样,那将使用F#开始。如果你有Visual Studio,你也可以玩F#,这样就可以平息另一个学习曲线。
这也取决于你是否只是想要'grok'功能编程来拓宽视野,或者实际使用它。如果您只是想要开始,那么从任何地方开始,但如果您打算使用它,那么选择与您当前框架兼容的东西。
我的2美分/便士
答案 4 :(得分:7)
我正在阅读Yet Another Haskell Tutorial的中间,这是一本非常有用且写得很好的Haskell书。
答案 5 :(得分:7)
Practical, Common Lisp是一本很棒的电子书。它与许多语言完全不同,但我觉得自己想要学习它是我编程生涯中最有价值的经历之一。有限的语法使得语言非常灵活,相对容易学习,但从概念上讲,需要一些时间来思考。
答案 6 :(得分:7)
也许有一个选项是下载整个在线版Real World Haskell?
这是一本学习Haskell的好书,但可以说它可能需要与一本关于函数式编程的更一般的书配对。
答案 7 :(得分:4)
我会从Lisp(特别是Scheme)开始,因为它很简单;它有一个非常简单的语法,无需担心静态类型系统。
Structure and Interpretation of Computer Programs不仅会向您介绍Scheme,还会教您所有主要的编程范例。全文可在知识共享许可下获得。
之后,您将更容易学习Haskell的其他功能,即更精细的语法,懒惰的评估和强大的类型系统。
答案 8 :(得分:4)
我会推荐任何一种语言的ML(标准ML或OCaml都很好)方言。
他们对Haskell产生了巨大的影响,并且比Haskell对FP的介绍更为温和。
答案 9 :(得分:3)
我跳你选择了Erlang或Lisp。 (第四)在那里你有我所知道的最令人兴奋的语言。
我应该去Erlang,Lisp和Forth,请发表评论。
答案 10 :(得分:3)
“如何设计程序”:http://www.htdp.org/
顺便问一下,你的目标是什么?
答案 11 :(得分:3)
我会选择“Clojure的喜悦”。
我认为你已经了解Java。 Clojure在JVM上运行,纯粹是功能性的(有一些例外可以促进并发编程)并且是一个lisp。它具有上面提到的lisps的所有优点(呃...从不介意尾调用优化),具有一些巨大的优势,如与Java的兼容性,高级持久数据结构和一个庞大而充满活力的社区。如果你想学习一些你可能有一天有机会专业工作的东西,可以选择Clojure(或F#,如果你能戒掉.net)。
答案 12 :(得分:2)
我绝不是这方面的专家,但我个人认为从方案开始可能是一个好主意。据我所知,方案是LISP的简化版本,将其视为LISP,但只包含基本要素。我认为scheme的语法非常纯粹,你必须超越括号,但它确实帮助我进入函数式编程的'感觉',而不必学习语言特性。
答案 13 :(得分:2)
我可能会因此而被投票,但我说要选择Ruby。它是一种非常漂亮和现代的混合功能OO语言,它将温和地向您介绍函数式编程的世界。或者任何其他具有闭包和高阶函数的语言(它必须是动态类型或类型推断,否则编写功能代码真的很难)。
一旦你对Ruby FP感到满意,或者你不想听我最好的建议,试试像Scheme这样的东西。这是一种优雅而温和的语言。
如果你从Common Lisp或Ocaml或Erlang或尤其是Haskell开始,你很可能会因为不同的原因而感到害怕而你会感到迷茫。如果你对Scheme感到满意,你可能想尝试这些,但我真的建议不要从它们开始。很少有人走这么远的路。
答案 14 :(得分:1)
两本好书:
“计算机程序的结构和解释”(Abelson& Sussman)和 “计算机编程的概念,技术和模型”(作者Peter Van Roy和Seif Haridi)。
两者都只涵盖功能性编程。
答案 15 :(得分:1)
我将第二个真实世界Haskell并添加:“Haskell: The Craft of Functional Programming”。
答案 16 :(得分:1)
我确实在A taste of Haskell找到了价值。这是Simon Peyton Jones的一次演讲。这是一个非常好的概述,首先看一下针对非FP程序员的语言。
Part 2 of the talk和a PDF of the slides。相机从不显示幻灯片,因此PDF确实有帮助。
答案 17 :(得分:0)
Lisps是唯一一个在核心和定义明确的标准(在CL和Scheme的情况下)具有常规语法的Lisps。 他们弥补了一个启发性的旅程。
我推荐Common Lisp。
有很好的免费初学者书籍,请查看Lamkins的“成功Lisp”和Seibel的“Practical Common Lisp”:
答案 18 :(得分:0)
对于命令式编程的过渡,我建议Chris Smith Programing F#。 第二章A. Rex评论上面关于Haskell resources和其他成员关于SICP。