12

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

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

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

编辑:正如我所说,我已经对 Haskell 进行了相当多的实验;根据我一直在查看 Scala 网站的答案之一的建议。查看 Scala 示例,代码似乎更“熟悉”(我的背景是 C 和 Java),但它似乎显然更多的是 OO/过程性和更少的功能。Scala 的一个巨大优势在于,它为我提供了另一种与 Java 一起使用的语言工具,并且可以成为我目前专业箭袋的另一个箭头,而不仅仅是一个学习练习。当我更深入地了解 Scala 时,功能方面会变得更加重要,还是我会倾向于只编写具有一些功能影响的 OO 代码?换句话说,Haskell 会比 Scala 更难更快地挑战我的先入之见吗?

4

9 回答 9

12

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

于 2008-11-01T23:51:32.380 回答
11

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

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

于 2008-11-02T09:48:05.827 回答
7

我推荐PLT SchemeSICP。该语言非常简单,您可以非常快速地了解重要概念。

于 2008-11-01T23:48:42.523 回答
6

Scala 绝不会像 Haskell 那样让你心烦意乱。在学习 FP 时选择 Scala 而不是 Haskell 的主要原因是让自己更温和地介绍单子、函子和高阶善良的危险荒野。如果您来自面向对象的背景并试图将这些知识转换为功能领域,那么 Scala 非常棒。如果您只想一头扎进深渊,那就不是太好了。

鉴于您的要求,我会推荐 GHC Haskell。没有什么比这更让你头疼了。:-) 尽管如此,我认为你仍然应该关注 Scala。该语言有很多方面是非常独特的,特别是它的类型系统(结构+名义子类型==甜蜜)。它不会像 Haskell 那样伤脑筋,但它会让你深入了解一些在其他地方可能找不到的概念,尤其是所谓的“类型化编程”方法。

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

于 2008-11-02T19:26:59.480 回答
5

另请查看Clojure

于 2008-11-02T01:44:20.560 回答
5

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

是的。

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

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

于 2008-11-02T18:25:46.437 回答
3

看看斯卡拉。它以 JVM 为目标,与 Java 互操作,并具有许多最先进的函数式编程特性。

于 2008-11-01T23:46:32.513 回答
3

喜欢使用 Haskell 和 GHC。GHC 包括一个交互式解释器 (GHCI),并具有非常有用的错误消息。此外,Haskell 是真正函数式语言的最佳示例之一,一旦您尝试了一下,使用起来还不错。此外,它还有一个很棒的类型系统。

于 2008-11-02T00:01:00.893 回答
0

曾经尝试过 Prolog 吗?……那会

?- bend(your_mind).
Yes


?- bend(X).
X = your_mind

无论如何,它给了我一个全新的视角...... 那里很多 信息

于 2008-11-02T00:45:41.800 回答