我听过很多关于函数式编程语言的知识,我愿意学习它。我想这主要是为了好玩,但是,我希望它能提高我的编程技巧。
我主要是C#/ .NET背景,所以我的第一选择是学习F#(因为.NET和熟悉Visual Studio)。另一方面,我想知道F#是否具有Lisp宏或Haskell高阶函数等功能。
你能比较F#,Haskell和Lisp吗?哪一个将是您选择的语言?
答案 0 :(得分:42)
F#是我的首选语言,但我强烈建议您学习它们。它们本身就是完全不同和有趣的。这里是每个人的快速浏览(可能有轻微的F#偏见),您可以通过Google搜索轻松找到更多信息:
F# - 是一种语言,可以轻松编写功能样式,让您轻松复制对象而不是改变它们。它还为您提供有趣的数据类型,如元组和代数数据类型,有用的语言结构,如模式匹配和列表推导。它还具有OO和命令功能以及对库的良好访问,因为您可以使用任何.NET框架组件。
Haskell - 是一种纯粹而懒惰的功能语言,是一种罕见甚至独特的野兽。这意味着根本没有任何副作用,除非它们被monad跟踪。 Haskel也有元组,代数数据和模式匹配。
Lisp - 而F#和Haskell是静态类型的,lisp是动态类型的。它具有独特的语法,它使用了大量的括号,并提供了一个有趣的宏功能,允许您对程序本身进行转换并扩展语法。
答案 1 :(得分:26)
我曾经有同样的问题
从那以后,我在F#中做了一些编程。现在我很高兴我做到了,因为在C#中理解LINQ真的很有帮助,而这恰好也是我的背景。 (因为我学习了F#,我几乎从不在C#中使用foreach)
我通过F#了解了很多关于延迟评估,列表和序列的事情,所有这些都可以选择任何语言,并且对列表,元组等有很好的支持(就像我猜的任何函数式语言一样),但是如果你选择F#,所有这些在C#中也非常有用。也许你已经知道所有这些东西并正确使用它,但如果你不这样做,请选择F#。
我开始here:一个非常好的视频教程,非常令人印象深刻,非常鼓舞人心的导师。
答案 2 :(得分:16)
目前我在第9频道观看有关功能编程基础知识的these视频。它是使用Haskell解释的,但基础知识适用于所有语言。我必须说它内容丰富且易于理解。
答案 3 :(得分:9)
实际上没有人回答这个具体问题:“我想知道F#是否具有Lisp宏或Haskell高阶函数等功能。”
F#不提供宏。此外,它不提供更高级的类型(这是我认为你首先要问的)。
F#确实提供了更高阶的函数,因为你可以轻松编写一个函数来获取函数并返回一个函数。实际上,C#(或实际上任何.NET语言)都可以这样做,因为Func
委托是.NET框架的一部分。
答案 4 :(得分:8)
答案 5 :(得分:8)
我不知道F#,但有时我喜欢玩它。我的语言是Clojure,它非常实用,也适用于CLR,但JVM版本是主要版本。
你想要很多东西。对F#的主要不同之处在于Clojure是动态类型的,并且它有很好的方式处理可靠性(我会说最好的一种)。
顺便说一句。 您是否知道F#是因为Haskell难以在CLR上运行而制作的? (这不是故事的全部,而是它的一部分)
答案 6 :(得分:6)
为什么选择? 自己学习Lisp和Haskell。 没有必要在你自己的时间学习F#。如果你需要它来工作,你将在工作中学习它;)
编辑:这家伙正在寻找语言来学习乐趣。好吧,Lisp和Haskell是很好的候选人,因为有趣的是他们将被用于(那里没有带薪工作)。他“可能”(尽管不太可能)有机会在工作中使用F#(他在MS商店),所以为什么在空闲时间学习一些东西可以在工作时学习它。答案 7 :(得分:5)
我将它们全部学到了不同的程度,并建议从Scheme(Lisp方言)开始 - 只是因为它最容易学习。 Haskell和F#是静态类型的,这对于现实生活中的项目来说是一个很大的优势,但是恕我直言他们有一点“太多”的语法,并不像Scheme那样容易接受。
.NET有一个很好的Scheme实现 - IronScheme。您可以查看我的文章“Playing with IronScheme”,看看您是否喜欢它。
答案 8 :(得分:4)
如果我们比较这三种语言,我会推荐Haskell。它比LISP更实用(因为它是类型系统),比F#更强大,更聪明。据你所知,F#是OCaml的.NET端口,并且在某种程度上它不像Haskell那样是非常清晰的,或者是OCaml。我建议你学习Haskell或OCaml来了解F#是多么不方便。