F#vs Haskell vs Lisp – 学习哪种语言?

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

我主要是C#/ .net背景,所以我的第一select是学习F#(因为.NET和熟悉Visual Studio)。 另一方面,我想知道F#是否具有像Lispmacros或Haskell高阶函数的function。

你能比较F#,Haskell和Lisp吗? 哪一个将是你select的语言?

F#是我select的语言,但我强烈build议学习它们。 他们都是完全不同的,有趣的。 这里有一个快速查看每个人(也许有一个轻微的F#偏见),你可以很容易地find更多的信息通过谷歌search:

F# – 是一种语言,可以很容易地在function风格编程,让您轻松复制对象,而不是改变它们。 它还为您提供有趣的数据types,如元组和代数数据types,有用的语言结构,如模式匹配和列表parsing。 它还具有面向对象和命令性function以及访问库的好处,因为您可以使用任何.NET框架组件。

哈斯克尔 – 是一种纯粹而懒惰的function语言,它是一种罕见的甚至是独一无二的野兽。 这意味着根本没有副作用,除非他们被monad跟踪。 Haskel也有元组,代数数据和模式匹配。

Lisp – 而F#和Haskell是静态types的,lisp是dynamictypes的。 它具有独特的语法,它使用大量的括号,并提供了一个有趣的macros观特性,使您可以对程序本身进行转换并扩展语法。

我有同样的问题一次

从那以后,我用F#做了一些编程。 现在我很开心,因为在C#中理解LINQ是非常有帮助的,而且碰巧也是我的背景。 (从我学习F#开始,我几乎从不在C#中使用foreach)

我通过F#学习了很多关于懒惰评估,列表和序列的东西,所有这些都可以select任何支持列表,元组等的语言(就像我猜想的任何函数式语言),但是如果你selectF# ,这一切在C#中都将非常有用。 也许你已经知道所有这些东西,并且正确地使用它,但是如果你不这样做的话,请selectF#。

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

目前,我正在第9频道上观看function性编程基础的video。 这是使用Haskell解释,但基本适用于所有语言。 我必须说这是非常丰富和容易理解。

没有人真的回答了这个具体问题:“我想知道F#是否具有Lispmacros或Haskell高阶函数的function。

F#不提供macros。 此外,它不提供更高的types(这是我以为你是在问起初)。

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

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

我的意见是,Scheme(Lisp变体)和阅读SICP是正确的。 你会学到很多。

但是出于实际的目的,如果你是一个.NET开发人员,那么也许F#更好。

我不知道F#但我喜欢有时玩。 我的语言是Clojure,它的function非常强大,也可以在CLR上运行,但JVM版本是主要版本。

它涵盖了你很多你想要的东西。 对F#的主要区别在于Clojure是dynamictypes的,并且它具有处理协调性的好方法(我会说的最好的一个)。

BTW。 你知道F#是因为Haskell难以在CLR上运行吗? (那当然不是全部,但是它的一部分)

为什么select? 同时学习Lisp和Haskell。 虽然在你自己的时间学习F#没有意义。 如果你需要它的工作,你会在工作中学习;)

编辑:这家伙正在看语言学习的乐趣。 那么,Lisp和Haskell是很好的候选人,因为有趣的是他们将被用于(没有付费的工作)。 他“可能”(尽pipe不太可能)有机会在工作中使用F#(他在MS店),那么为什么在空闲时间学习东西,而他可以在工作中学习。

我把他们全部学到了不同程度,并build议从Scheme(一种Lisp方言)开始,因为它是最容易学习的。 Haskell和F#是静态types的,这对现实生活中的项目来说是一个很大的优势,但是恕我直言,他们有一点“太多”的语法,不像Scheme那样容易。

.NET有一个很好的Scheme实现 – IronScheme。 你可以看看我的文章“ 玩IronScheme ”,看看你是否喜欢它。

如果我们比较这三种语言,我会推荐Haskell。 它比我认为的LISP更实用(因为它是types系统),比F#更强大和更聪明。 据你所知,F#是OCaml的.NET端口,在某种程度上它不像Haskell或OCaml那样清晰。 我build议你学习Haskell或者OCaml来知道F#是多么不方便。