当您熟悉LISP时,学习F#的附加价值是什么?
静态类型(带类型推断)
代数数据类型
模式匹配
可扩展模式与活动模式匹配.
Currying(语法很好)
称为"工作流"的Monadic编程提供了一种进行异步编程的好方法.
其中许多是编程语言世界中相对较新的发展.这是你在F#中看到的,你不会在Lisp中,特别是Common Lisp,因为F#标准仍在开发中.因此,您会发现有相当多的东西需要学习.当然,诸如ADT,模式匹配,monad和currying之类的东西可以构建为Lisp中的库,但是学习如何在它们方便内置的语言中使用它们会更好.
学习F#用于实际使用的最大优点是它与.NET的集成.
将Lisp直接与F#进行比较并不公平,因为在一天结束时有足够的时间你可以用任何一种语言编写相同的应用程序.
但是,您应该学习F#,原因与C#或Java开发人员应该学习它的原因相同 - 因为它允许在.NET平台上进行函数式编程.我不是100%熟悉Lisp,但我认为它有一些与OCaml相同的问题,因为没有一流的库支持.你如何在Lisp中进行数据库访问?那么高性能的图形呢?
如果您想了解更多关于'Why .NET'的信息,请查看此SO问题.
如果你知道F#和Lisp,你会发现这是一个相当奇怪的问题.
正如其他人所指出的那样,Lisp是动态类型的.更重要的是,Lisp的独特之处在于它是homoiconic:Lisp代码是一种基本的Lisp数据类型(列表).宏系统通过让您编写在编译时执行的代码并修改其他代码来利用它.
F#没有这样的东西 - 它是一种静态类型的语言,借用了ML和Haskell的许多想法,并在.NET上运行它
您要问的是"如果我知道如何使用叉子,为什么我需要学习使用勺子?"
鉴于LISP是动态类型的,而F#是静态类型的,我发现这种比较很奇怪.