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

emp*_*mpi 42 c# lisp f# haskell language-comparisons

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

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

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

Rob*_*ert 43

F#是我的首选语言,但我强烈建议你学习它们.它们本身就是完全不同和有趣的.这里是每个人的快速浏览(可能有轻微的F#偏差),您可以通过Google搜索轻松找到更多信息:

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

Haskell - 是一种纯粹而懒惰的功能语言,是一种罕见甚至独特的野兽.这意味着根本没有任何副作用,除非它们被monad跟踪.Haskel也有元组,代数数据和模式匹配.

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

  • 在Haskell中,除了monad之外,还有更多方法可以跟踪副作用,例如箭头和应用程序. (8认同)

Pet*_*ter 27

我曾经有过同样的问题

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

我通过F#了解了很多关于延迟评估,列表和序列的事情,所有这些都可以选择任何语言,并且对列表,元组等有很好的支持(就像我猜的任何函数式语言一样),但是如果你选择F# ,所有这些在C#中也非常有用.也许你已经知道所有这些东西并正确使用它,但万一你不这样做,选择F#.

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


Ton*_*ion 17

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

  • 我认为Erik Meijer教授使用haskell而不是F#的函数式编程是有原因的.只有haskell支持的某些功能(例如没有副作用).所以+1为haskell (3认同)

Arv*_*rve 8

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

我的观点是Scheme(一个Lisp变体)和阅读SICP是正确的.你会学到很多东西.

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

  • 和Clojure(Lisp)为JVM开发人员. (2认同)

nic*_*kik 8

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

它会让你想到很多你想要的东西.F#的主要不同之处在于Clojure是动态类型的,并且它具有很好的处理可靠性的方法(我会说最好的方法之一).

BTW.您是否知道F#是因为Haskell难以在CLR上运行而制作的?(当然不是整个故事,而是它的一部分)


Jus*_*tin 8

实际上没有人回答这个具体问题:"我想知道F#是否具有Lisp宏或Haskell高阶函数等功能."

F#不提供宏.此外,它不提供更高级的类型(这是我认为你最初问的).

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


Mar*_*rko 6

为什么选择?自己学习Lisp和Haskell.没有必要在你自己的时间学习F#.如果你需要它来工作,你将在工作中学习它;)

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

  • @mipadi:嗯,如果他们每两个月发布2个新职位,他们应该真的关闭网站;) (4认同)
  • "你自己学习F#没什么意义",什么??? (3认同)
  • 没有工作?有人应告诉http://lispjobs.wordpress.com/,以便他们可以关闭该网站.;) (3认同)

Nem*_*vic 5

我从不同程度上学到了所有这些知识,并建议从Scheme(一种Lisp方言)开始 - 只是因为它最容易学习.Haskell和F#是静态类型的,这对于现实生活中的项目来说是一个很大的优势,但恕我直言他们有一点"太多"的语法,并不像Scheme那么容易.

.NET有一个很好的Scheme实现 - IronScheme.您可以查看我的文章" 与IronScheme一起玩 ",看看您是否喜欢它.


Kak*_*adu 5

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