我知道几种函数式编程语言 - F#、Lisp及其方言、R等等。然而,由于我从未使用过任何一种(尽管我提到的三种都在我的“学习”名单上),我想知道各种函数式编程语言的优缺点。在学习语言和实际应用中是否存在重大优缺点?
我知道几种函数式编程语言 - F#、Lisp及其方言、R等等。然而,由于我从未使用过任何一种(尽管我提到的三种都在我的“学习”名单上),我想知道各种函数式编程语言的优缺点。在学习语言和实际应用中是否存在重大优缺点?
Haskell是一种“极端”(惰性、纯粹)的语言,拥有活跃的用户、大量文档和可执行应用程序。
SML是一种“不那么极端”(严格、非纯)、拥有活跃用户、正式规范和多种实现(SML/NJ、Mlton、Moscow ML等)。实现方式因应用而异,涉及运行时环境的部署方式。
OCaml是带有态度的ML。它具备面向对象的特性,拥有活跃用户、文档、附加组件和可执行应用程序。
Erlang是并发的、严格的、纯粹的(大多数情况下),支持分布式应用程序。它需要单独安装运行时环境,因此在部署方面与生成可执行文件的语言有所不同。
F#类似于具备Microsoft支持和.NET库的OCaml。
Scala在JVM上运行,既可以作为具备高级功能的函数式语言使用,也可以简单地作为超强版Java使用,或同时兼备两者。这种灵活性被认为是学习函数式语言的缺点之一,因为很容易滑回命令式Java的方式。当然,如果想要使用现有的JVM库,这也是一个优势。
http://paulspontifications.blogspot.com/2007/08/no-silver-bullet-and-functional.html
就函数式语言之间的区别而言:
函数式语言的绝妙之处在于它们以λ演算和其他数学为基础。这导致可以更轻松地在不同语言之间使用相似的算法和思想。
就应该学习哪种语言而言:选择一个对你来说有舒适环境的语言。例如,如果你正在使用.NET和Visual Studio,则F#是一个非常好的选择。(实际上,VS集成使F#成为一个强有力的竞争者。)书籍“如何设计程序”(全文,免费,在线阅读),配合PLT Scheme也是一个不错的选择。
我有偏见,但 F# 看起来具有最大的“现实世界”潜力。这主要是因为它具有良好的 IDE/.NET 集成,允许您充分利用 .NET 和面向对象编程,同时保持很多函数式的优势(并以其他方式扩展它)。Scala 可能是一个有竞争力的选择,但它更像是一个具有一些函数式特性的面向对象语言;因此 Scala 不会带来如此大的生产力提升。Lisp 具有平滑的学习曲线。你可以在一个小时内学会基础知识,当然要学习惯用语等需要更长时间。不过,Lisp 有许多方言,与主流环境如 Java 或 .NET 的交互困难。
我不建议使用 R,除非你需要进行统计分析。它是一种奇怪的语言,不完全是函数式的。你可以在 R 中进行函数式编程,但大多数人不这样做。
如果你熟悉 Microsoft 工具栈,那么 F# 可能很容易上手。而且它有一个巨大、经过充分测试的库,即 CLR。
你可以在任何语言中使用函数式编程风格,尽管有些语言比其他语言更容易实现。就这方面而言,你可以尝试 Python。
ML家族(SML/OCaml/F#):
优点:
缺点:
我还没有提到大多数静态类型的函数式语言常见的特性:类型推断、参数化多态、高阶函数、代数数据类型和模式匹配。
我在大学学习了Haskell这门纯函数式语言,我可以说它非常强大,但是我也找不到实际的用途。
然而,我发现了这个网站:Haskell in practice。看看吧,真的很棒。
函数式编程范式的特点有时候是优点,有时候是缺点,这取决于情境和背景。其中一些特点包括:
引用自维基百科:
效率问题