Functional programming 函数式编程:最佳平台/环境

Functional programming 函数式编程:最佳平台/环境,functional-programming,Functional Programming,我最近一直在研究和玩函数式编程,只是为了拓宽我对编程的思考,因为我发现“功能性”思维很难 我已经下载了格拉斯哥哈斯克尔,并进行了实验 我想知道的是,Windows最好的平台是什么?我更喜欢基于JVM的方法,但关于SO的另一篇文章指出,由于缺乏对尾部递归的支持,真正的FP语言无法在JVM上实现。你说呢 编辑:正如我所说,我已经用Haskell做了一些实验;根据其中一个答案的建议,我一直在查看Scala网站。综观Scala示例,代码似乎更“熟悉”(我的背景是C和Java),但它显然更面向对象/过程化

我最近一直在研究和玩函数式编程,只是为了拓宽我对编程的思考,因为我发现“功能性”思维很难

我已经下载了格拉斯哥哈斯克尔,并进行了实验

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


编辑:正如我所说,我已经用Haskell做了一些实验;根据其中一个答案的建议,我一直在查看Scala网站。综观Scala示例,代码似乎更“熟悉”(我的背景是C和Java),但它显然更面向对象/过程化,功能更少。Scala的一个巨大优势是,它为我提供了另一种与Java并行使用的语言工具,并可能成为我目前职业生涯中的另一支箭,而不仅仅是一种学习练习。当我深入研究Scala时,功能方面会变得更为突出,还是我会倾向于只编写具有某种功能影响的OO代码?换句话说,Haskell会比Scala更难更快地挑战我的先入之见吗。它以JVM为目标,与Java互操作,并具有许多最先进的函数式编程功能。

我推荐和。该语言非常简单,您可以很快了解重要的概念。

请查看。CLR有一个.tail指令,因此您可以使用不会导致堆栈溢出(异常,而不是网站)的tail调用编写F#代码。这是一段关于PDC中F#的介绍视频。

我喜欢使用Haskell和GHC。GHC包括一个交互式解释器(GHCI),并有非常有用的错误消息。另外,Haskell是一种真正函数式语言的最好例子之一,只要你尝试一下,就可以使用它。另外,它还有一个很棒的类型系统。

有没有试过Prolog。。。那会

?- bend(your_mind).
Yes


?- bend(X).
X = your_mind
它给了我一个全新的视角。。。

另请看。

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

当您对从Haskell中学到的东西感到满意时(这将是很多!),您就要开始评估更自由的函数式语言,如Clojure或Scala。或者你可以和Haskell呆在一起,他的图书馆情况其实也没那么糟糕。在这一点上,这是一个环境和个人偏好的问题。但为了做出这样的选择,我认为,首先学会如何以“纯粹的”功能性方式思考是至关重要的

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


如果你真的想学习,就远离你的舒适区


在接下来的3个月里,你真的要用Scala来编写生产代码吗?

Scala决不会像Haskell那样让你心烦意乱。学习FP时,选择Scala而不是Haskell的主要原因是给自己一个更温和的介绍,让自己了解单子、函子和高阶善的危险领域。如果您来自一个面向对象的背景,试图将这些知识转换为功能性领域,那么Scala非常棒。如果你想头朝下潜到深水区,那就不太好了

根据你的要求,我推荐GHC Haskell。没有什么比这更能扭曲你的脑袋了。:-)尽管如此,我认为你还是应该关注Scala。语言有许多方面是绝对独特的,特别是它的类型系统(结构+名词性子类型==sweet)。它不会像Haskell那样伤到你的头脑,但它会让你深入了解一些你在其他任何地方都找不到的概念,特别是所谓的“类型化编程”方法


哦,为了回答你问题的第二部分(Scala中的FP与OO),我倾向于在面向对象框架中以函数式的方式编写代码。这有点难以描述,但事实就是这样。可以将其视为从面向对象的角度设计API,但以功能风格实现所有内容。我保持事物不变,并花费大量时间使用高阶方法,但我都是在继承和常规的名义子类型的范围内进行的。每隔一段时间,我还是会写一些命令式的东西,但只有在这样做比使用函数式更简洁的时候。

我不认为这不是函数式编程。Prolog是一种逻辑编程语言,与函数式编程语言相关,但不是函数式编程语言。谢谢;尽管Lisp是其中的一种语言,它的基本形式出于某种原因让我很恼火。Kiwi:我以前也这么想,但在认真尝试了Common Lisp之后,我回过头来想,“为什么我不早点这么做呢?”不过,我不推荐Lisp作为学习FP的语言(见我的答案)。Lisp的优点在别处。Kiwi,作为对你编辑的回应,我同意Matthias Benkard关于滑向命令式风格的危险的评论。如果你想受到挑战,Haskell是一个很好的选择。我更喜欢基于JVM的方法,但SO上的另一篇文章指出,真正的FP语言无法在JVM上实现,请不要相信这一点。JVM上有各种各样的函数式语言:Scala、Clojure(lispy)、Yeti(ML-ish)和Frege,这是一种非严格的纯函数式语言,旨在实现兼容性