【问题标题】:What's a good beginning text on functional programming? [closed]关于函数式编程的好的开始文本是什么? [关闭]
【发布时间】:2010-09-06 14:15:54
【问题描述】:

我喜欢在我的舒适区之外学习语言,但我很难找到开始学习函数式语言的地方。我听说过很多关于Structure and Interpretations of Computer Programs 的好消息,但是当我几年前试图通读它时,它似乎在我脑海中呼啸而过。与网站相比,我在书籍方面做得更好,但是当我访问当地的书店时,LISP 上的书籍看起来有点吓人。

那么什么是一个好的起点?我的目标是能够在 6 个月左右的时间内使用函数式编程语言解决简单的问题,并且能够转向更高级的主题,识别函数式语言何时是适合该工作的工具,并使用该语言在 2-3 年内解决更多问题。我喜欢有大量例子的书,但也包括需要解决的挑战。函数式语言是否存在这种情况?

【问题讨论】:

  • 你当地的书店真的有关于 Lisp 的书吗?
  • 我上周访问的一家电脑书店有“Land of Lisp”、“Practical Common Lisp”和“SICP”...

标签: functional-programming lisp scheme


【解决方案1】:

The Little Schemer 很好地教授递归,而且它有趣且易于阅读。

我还喜欢 The Scheme Programming Language 以更广泛地介绍该语言。

【讨论】:

    【解决方案2】:

    我发现The Little Schemer 是函数式编程的绝佳介绍。它完全基于简单的、一口大小的示例,这些示例是随着本书的深入而建立的。

    【讨论】:

      【解决方案3】:

      Haskell 是一种非常适合初学者的函数式编程语言。有人问过 Haskell 的好资源,所以我会指出你there

      如果您正在寻找一本关于函数式编程的好书,我会推荐 Bruce J. Maclennan 的《函数式编程:实践与理论》。
      但是,在阅读之前,您需要复习一下您的集合论和逻辑。它包括 LISP、Haskell 和其他语言的示例。

      【讨论】:

        【解决方案4】:

        如果您有 .NET 经验,Expert #F 很好。

        F# 源自 OCaml。 Lisp 在函数式语言中更加纯粹。

        【讨论】:

        • 我认为我不会认为 Lisp 比 OCaml 更纯粹。大多数 Lisp 并没有做任何事情来防止你发生突变。另一方面,OCaml 使得不可能改变变量,除非你将它们声明为可变的。
        【解决方案5】:

        SICP 是一本很棒的书。

        这可能是我的偏见,但我认为 ocaml 很容易进入。您可以选择以几种不同的风格进行编程,直到您完全适应为止。我posted a bunch of links Haskell 和 Ocaml 参考了 书籍,其中的示例等等似乎就在你的小巷里。

        如果你更喜欢 Lisp,你可以尝试通过99-problems in Lisp(你可以用任何语言,真的),或者你可以观看编写 SICP 的人的lectures

        再往前走,获取“Purely Functional Data Structures”,因为它会进入核心深度设计和函数式语言中必须考虑的因素——它使用机器学习(由 ocaml 派生来自)。

        【讨论】:

        • 我现在正在阅读 SICP,但我不确定您在说什么:“拉格朗日”?在我的第二版平装本中,索引中唯一提到拉格朗日的是拉格朗日插值的脚注:www-mitpress.mit.edu/sicp/full-text/book/…
        • 那部分是指 SICM (Structure and Interpretation of Classical Mechanics),我的错。
        【解决方案6】:

        我听说过关于 Haskell Functional Programming 的好消息,但我还在亚马逊上找到了这本 list 的函数式编程书籍,可能对您有所帮助。

        【讨论】:

          【解决方案7】:

          我真的很喜欢 Thompson 的“Haskell:函数式编程的技巧”,因为它写得很好,而且 Haskell 比其他函数式语言更容易上手,同时完全纯粹(不像 Lisp 或 Scheme)。

          【讨论】:

          • +1,这本书也有很多出色的练习,因为它主要是作为教科书编写的。解释和叙述也使这本书成为一个不错的选择。
          【解决方案8】:

          由于有很多不同的函数式编程语言,因此很难推荐书籍。但是,如果您对 Common Lisp 感兴趣,最近我一直在阅读 Peter Seibel 的 "Practical Common Lisp",您可以在将辛苦赚来的现金投入其中之前,先阅读 check out online for free。这是对 CL 的一个非常温和的介绍,有很好的解释和大量的例子。 Seibel 是一位伟大的作家(例如:阅读the story of Mac,)他擅长让您保持参与,我认为这确实是 SICP 失败的地方。简直太干了!但是,虽然 Practical Common Lisp 非常多示例,但它并没有真正需要解决的挑战,尽管示例主要是为了让您继续工作并在它们的基础上进行构建。

          另一本好书,这本面向方案的:How to Design Programs。 (Online) 我没有太多时间看这本书,我自己更像是一个 Lisper,而不是一个 Schemer,但它写得很好,有很好的解释和例子,还有很多练习要做。它似乎在 Scheme 人群中很受欢迎。

          【讨论】:

            【解决方案9】:

            我从 Jeffrey Ullman 的 Elements of ML Programming 中学习,非常好。当 OCaml、F# 和 Haskell(似乎)更受欢迎时,它会因为与标准 ML 相关而失分。

            【讨论】:

              【解决方案10】:

              试试Real World Haskell。在线免费。

              【讨论】:

                【解决方案11】:

                计划者指南和相关软件 - 非常好的东西

                http://www.schemers.com/tsg.html

                【讨论】:

                  【解决方案12】:

                  我觉得 Chris Okasaki 的 Purely Functional Data Structures 值得一看。

                  仅供参考http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf

                  【讨论】:

                    【解决方案13】:

                    我真的推荐 Paul Graham 的“On Lisp”。

                    即使对于函数式编程的初学者(就像我阅读它时一样),它也很简洁且可读性很强。它包含许多非常简短的示例,每个示例都有助于理解一件事。

                    我经常想读这本书:这只是一种语言,它包含我曾经想要的其他(非功能性)语言的特性,但从未得到。 :-( 这正是学习它的书,总是易于理解,有时甚至很有趣!

                    您可以通过the author's site免费获得它!

                    【讨论】:

                      【解决方案14】:

                      查看Introduction to functional programming。它提供了不同的视角。

                      【讨论】:

                        【解决方案15】:

                        Real-World Functional Programming(带有 F# 和 C# 示例)

                        【讨论】:

                          猜你喜欢
                          • 2023-03-02
                          • 2010-09-12
                          • 1970-01-01
                          • 2010-11-11
                          • 1970-01-01
                          • 2010-10-12
                          • 1970-01-01
                          • 2010-09-05
                          • 2013-03-05
                          相关资源
                          最近更新 更多