44

我听说过很多关于函数式编程语言的知识,我愿意学习一门。我想这主要是为了好玩,但是,我希望它会提高我的编程技能。

我主要有 C#/.NET 背景,所以我的第一选择是学习 F#(因为 .NET 和熟悉 Visual Studio)。另一方面,我想知道 F# 是否具有 Lisp 宏或 Haskell 高阶函数等功能。

你能比较一下 F#、Haskell 和 Lisp 吗?哪一种是您选择的语言?

4

9 回答 9

45

F# 是我选择的语言,但我强烈建议大家学习它们。它们本身就完全不同且有趣。以下是对每一个的快速概览(可能带有轻微的 F# 偏见),您可以通过谷歌搜索轻松找到更多信息:

F# - 是一种使函数式编程变得容易的语言,让您可以轻松地复制对象而不是改变它们。它还为您提供有趣的数据类型,如元组和代数数据类型,有用的语言结构,如模式匹配和列表推导。它还具有 OO 和命令式特性以及对库的良好访问,因为您可以使用任何 .NET 框架组件。

Haskell - 是一种纯粹而懒惰的函数式语言,造就了稀有甚至独特的野兽。这意味着根本没有副作用,除非它们被单子跟踪。Haskel 也有元组、代数数据和模式匹配。

Lisp - F# 和 Haskell 是静态类型的,而 lisp 是动态类型的。它具有使用大量括号的独特语法,并提供了一个有趣的宏功能,允许您对程序本身进行转换并扩展语法。

于 2010-02-10T12:40:37.573 回答
28

我曾经有同样的问题

从那时起,我开始使用 F# 进行一些编程。现在我很高兴我做到了,因为理解 C# 中的 LINQ 真的很有帮助,而这恰好也是我的背景。(自从我学习了 F#,我现在几乎从不在 C# 中使用 foreach)

我通过 F# 学到了很多关于惰性求值、列表和序列的知识,所有这些你都可以选择任何对列表、元组等有良好支持的语言(就像我猜的任何函数式语言一样),但如果你选择 F# ,所有这些在 C# 中也将非常有用。也许您已经知道所有这些东西并正确使用它,但如果您不知道,请选择 F#。

我从这里开始:一个非常好的视频教程,非常令人印象深刻且非常鼓舞人心的导师。

于 2010-02-10T12:36:13.003 回答
18

目前,我正在第 9 频道观看有关函数式编程基础的这些视频。它使用 Haskell 进行解释,但基础知识适用于所有语言。我必须说它内容丰富且易于理解。

于 2010-02-10T12:33:12.193 回答
8

这是一个非常主观的问题。

我认为 Scheme(Lisp 变体)和阅读SICP是正确的。你会学到很多东西。

但出于实际目的,如果您是 .NET 开发人员,那么 F# 可能会更好。

于 2010-02-10T12:42:46.607 回答
8

我不知道 F#,但我有时喜欢玩它。我的语言是 Clojure,它非常实用,也适用于 CLR,但 JVM 版本是主要版本。

它超越了你很多你想要的东西。与 F# 的主要区别在于 Clojure 是动态类型的,并且它具有非常好的处理并发性的方法(我想说的最好的方法之一)。

顺便提一句。你知道 F# 的诞生是因为 Haskell 很难在 CLR 上运行吗?(当然这不是故事的全部,而是其中的一部分)

于 2010-06-14T13:53:21.400 回答
8

没有人真正回答过这个具体问题:“我想知道 F# 是否具有 Lisp 宏或 Haskell 高阶函数等特性。”

F# 不提供宏。此外,它不提供更高种类的类型(这就是我最初认为您要问的)。

F# 确实提供了高阶函数,因为您可以轻松编写一个接受函数并返回函数的函数。事实上,C#(或实际上任何 .NET 语言)都可以做到这一点,因为Func委托是 .NET 框架的一部分。

于 2011-07-22T18:18:15.330 回答
7

为什么选择?自己学习 Lisp 和 Haskell。不过,在自己的时间学习 F# 毫无意义。如果您在工作中需要它,您将在工作中学习它;)

编辑:这家伙正在寻找语言来学习乐趣。好吧,Lisp 和 Haskell 是很好的候选者,因为它们将被用于乐趣(那里没有带薪工作)。他“可能”(尽管不太可能)有机会在工作中使用 F#(他在 MS 商店),所以为什么在空闲时间学习一些东西,而他可以在工作中学习它。

于 2010-02-10T13:51:57.207 回答
5

我在不同程度上学习了所有这些,并建议从 Scheme(一种 Lisp 方言)开始 - 仅仅是因为它最容易学习。Haskell 和 F# 是静态类型的,这对于实际项目来说是一个很大的优势,但恕我直言,它们的语法有点“太多”,不像 Scheme 那样容易上手。

.NET 有一个不错的 Scheme 实现 - IronScheme。你可以看看我的文章《玩弄 IronScheme》,看看你是否喜欢。

于 2010-02-10T15:20:40.577 回答
5

如果我们比较这三种语言,我会推荐 Haskell。它比我认为的 LISP 更实用(因为它是类型系统),并且比 F# 更强大和更聪明。据您所知,F# 是 OCaml 的 .NET 端口,并且在某种程度上,它不像 Haskell 或 OCaml 那样清晰。我建议你学习 Haskell 或 OCaml 以了解 F# 的不便之处。

于 2012-07-12T07:04:51.780 回答