功能编程:最佳平台/环境

时间:2008-11-01 23:35:46

标签: functional-programming

我最近一直在研究和使用函数式编程,仅仅是为了拓宽我对编程的思考,因为我觉得“在功能上”的思考很困难。

我已经下载了Glasgow Haskell并对其进行了实验。

我想知道的是,Windows试用FP的最佳平台是什么?我更喜欢基于JVM的方法,但SO上的另一篇文章表明,由于缺乏对尾递归的支持,无法在JVM上实现真正的FP语言。你说什么?

编辑:正如我所说,我已经与Haskell进行了相当多的尝试;根据其中一个答案的建议,我一直在审查Scala网站。查看Scala示例,代码似乎更“熟悉”(我的背景是C和Java),但它似乎更多OO /程序性和功能性更低。 Scala的一个巨大优势在于它为我提供了另一种与Java并排使用的语言工具,并且可能成为我当前专业箭袋中的另一个箭头,而不仅仅是一个学习练习。当我进一步深入Scala时,功能方面是否会变得更加突出,或者我最终只会编写具有某些功能影响的OO代码?换句话说,Haskell会比Scala更难和更快地挑战我的先入之见吗?

9 个答案:

答案 0 :(得分:12)

结帐F#。 CLR有一个.tail指令,因此您可以使用不会导致StackOverflow的尾调用来编写F#代码(例外,不是网站)。 Here是关于来自PDC的F#的介绍视频。

答案 1 :(得分:11)

如果你真的想学习如何以功能的方式思考,那么Haskell绝对是正确的选择。几乎所有其他语言都让你很容易陷入命令式的风格。 Haskell将迫使你进入一种功能性思维模式。我发现这在学习时不可或缺。 (当然,你当然可能比我更有纪律,但为什么要推动你的运气呢?)

如果您对从Haskell学到的东西感到满意(这将是很多!),那么您将开始评估更自由的功能语言,如Clojure或Scala。或者你可以留在Haskell,其库的情况实际上并不是那么糟糕。那时,这是一个环境和个人偏好的问题。但是,为了做出这样的选择,我认为首先学习如何以“纯粹”的功能方式思考是至关重要的。

答案 2 :(得分:7)

我建议PLT SchemeSICP。语言非常简单,您可以非常快速地掌握重要概念。

答案 3 :(得分:6)

Scala不会像Haskell那样在任何地方弯曲你的想法。学习FP时选择Scala而不是Haskell的主要原因是为了让自己更加温和地介绍monad,functor和高阶善良的危险野性。如果您来自面向对象的背景,试图将这些知识转化为功能性土地,Scala是非常棒的。如果你想直接潜入深水区,那就没那么好了。

鉴于你的要求,我会推荐GHC Haskell。没有什么能像你那样扭曲你的头脑。 :-)尽管如此,我认为你应该继续关注Scala。该语言的许多方面都是独特的,特别是它的类型系统(结构+名义子类型==甜)。它不会像Haskell那样伤害你的头脑,但它会让你深入了解在其他地方找不到的一些概念,特别是所谓的“有类型编程”方法。

哦,为了回答问题的第二部分(Scala中的FP vs OO),我倾向于在面向对象的框架中以函数式编写代码。这有点难以描述,但就是这样。可以把它想象成从面向对象的角度设计API,但以功能样式实现所有内容。我保持不变的东西并花费大量时间使用更高阶的方法,但我在继承和传统的名义子类型的范围内完成所有这些。每隔一段时间,我仍然会写一些必要的东西,但只有当它更干净时才能使用功能样式。

答案 4 :(得分:5)

另请参阅Clojure

答案 5 :(得分:5)

  

换句话说,Haskell会比Scala更难和更快地挑战我的先入之见吗?

如果您真的想学习,请远离您的舒适区。

你真的打算在未来3个月内将Scala用于生产代码吗?

答案 6 :(得分:3)

看看Scala。它以JVM为目标,与Java互操作,并具有许多最先进的函数式编程功能。

答案 7 :(得分:3)

喜欢使用Haskell和GHC。 GHC包括一个交互式解释器(GHCI),并提供非常有用的错误消息。加上Haskell是真正功能性语言的最好例子之一,一旦你尝试了它,就不会太糟糕了。此外,它还有一个 awesome 类型的系统。

答案 8 :(得分:0)

有没有试过Prolog? ......那就是

?- bend(your_mind).
Yes


?- bend(X).
X = your_mind

无论如何,它给了我一个全新的视角...... plenty info out there