【问题标题】:What do I learn to "enlighten myself with the ways" of functional programming?我要学什么来“用函数式编程的方式启发自己”?
【发布时间】:2011-01-26 18:53:05
【问题描述】:

我已经编码了几年了,没什么太复杂的。 C++ 是我最了解的。我最近偶然发现了 Paul Graham 的网站,编码恐怖,现在在这里。

我要学什么来“用函数式编程的方式启发自己”? Haskell、Scheme 还是 CLisp?

【问题讨论】:

  • 你也有 Scala,它似乎有一些动力:scala-lang.org。此外,来自 C++ 背景,您可以在 D 中找到一些有趣的 FP 构造:在 D 中,只要有意义,您就会使用(纯)FP。
  • 当我们在 VM 上时,F# 是 Scala 的 .NET 对应物。

标签: haskell functional-programming lisp scheme language-comparisons


【解决方案1】:

您听说过 F#、ML 或 OCaml 吗?这三种语言属于 ML 家族。

F# 是 Microsoft 支持的新 ML 方言,将与 Visual Studio 2010 一起提供。F#(或其他 ML 语言)的好处是,当您第一次开始时,您可以编写命令式代码并学习良好的函数式风格逐步地。

这是我为Project Euler #2 写的一个例子。当我第一次这样做时,我使用了命令式风格。后来,我知道如何使用惰性序列,这是一个强大的函数式编程概念。

【讨论】:

    【解决方案2】:

    “用函数式编程的方式启发自己”?

    Haskell 是函数式风格的最强典范,强调纯函数式编程(无副作用)、强大的静态类型,以及强调多核并行性的实用实现,同时还拥有庞大的社区(大约 2000 个库在http://hackage.haskell.org 和许多在线资源)。

    它以重新培训人们对编程的看法而闻名。

    但这是宣传,而不是有用的 stackoverflow 问答环节。您必须自己决定要学习的内容。

    【讨论】:

      【解决方案3】:

      如果您对函数式编程感兴趣,Haskell 是该列表中唯一的纯函数式语言。 Common Lisp 是一种弱功能的混合范式语言,Scheme 功能更强,但仍然不纯。 Lisp 之所以有趣还有其他原因,但 Haskell 几乎是函数式编程的最先进技术。

      顺便说一句,我鼓励像 Haskell 这样更强大的函数式语言的原因是因为“学习函数式编程”的很大一部分是学习如何以不同的方式思考你的程序。如果你的语言让命令式写作感觉很自然,那么很容易陷入这种思维方式,而永远不会意识到有不同的方式来做。

      【讨论】:

      • 我不认为一种语言越纯粹就越适合学习函数式编程。它也可能使进入功能性思维模式的障碍太大。我个人开始使用 ruby​​、lua 和 python 进行函数式编程。我之前做的 OCaml 并没有让我获得函数式编程,因为它太陌生而无法让我获得这些概念。我认为 Scheme 会是一种更务实的方法。
      【解决方案4】:

      正如其他答案所说,这三个都很好。

      但如果你决定使用 Lisp,那么我建议你选择 Clojure,这可能是它最近的转世。

      【讨论】:

      • 如果你想要 OO Lisp,Clojure 非常好,但如果你想学习函数式编程,它是一个糟糕的选择。它甚至没有消除尾声!
      • @Porculus:Clojure 不能消除尾调用,因为它与 Java 的集成存在问题,但它确实允许使用 recur 运算符进行递归解决方案。据我所知,它似乎仍然比 Common Lisp 更强大。
      • Clojure 比我所知道的任何其他 Lisp 都更实用——它在风格上更接近 Haskell。惰性序列、不可变的数据结构、严格控制的可变性、不鼓励使用 OOP 等等...... 至于 TCO - 它适用于 recur 的 99% 的情况,并为其他 1% 的情况提供替代的良好解决方案。在使用 Clojure 的三年中,我从未遇到过 TCO 问题.....
      【解决方案5】:

      这三个都很好,取决于每个人。

      如果您决定使用 haskell,这是一个很好的资源:@​​987654321@ 和 real world haskell

      【讨论】:

        【解决方案6】:

        在这三个中,我想说 Scheme 是最简单的,如果这是您的主要关注点的话。 SICP 使用 Scheme,它本身就是学习函数式编程的好资源。

        不过,Common Lisp 有许多高级功能使其非常具有表现力,例如强大的错误处理(比异常更强大)、multimethods 和对aspect oriented programming 的支持。

        你可能会从一种开始,但最终你应该学习多种语言。

        【讨论】:

        • Common Lisp 确实有很多很酷的特性,但大部分都与函数式编程无关。
        • @Chuck:非常正确。这就是我推荐使用 Scheme 而不是 Common Lisp 的原因之一。我就是这样的粉丝,我忍不住要提一些。活力 NCITS/J13。
        • 当您想了解函数式语言如何在幕后工作时,该方案非常适合。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        • 2010-11-10
        相关资源
        最近更新 更多