有静态类型的函数式语言吗?

eri*_*oco 13 types programming-languages functional-programming static-typing

谷歌这是一件难事,也许SO有更好的答案?

我来自静态类型的背景和调查函数式编程,但我对动态类型并不完全兴奋.好奇有什么样的选择.

一个答案开始:ActionScript 3是静态类型的,并提供一些功能范例,虽然AS3程序不经常使用它们.

Fra*_*ank 20

有许多.Haskell,OCaml和F#浮现在脑海中.如果您是Windows开发人员,F#非常好并得到Microsoft的良好支持(以及非常强大的StackOverflow社区).Lisp系列语言(Common Lisp,Scheme,Clojure)是动态函数语言的示例.

ActionScript 3具有可选的静态类型.另一方面,Haskell,OCaml和F#编译器使用类型推断来确定性地推断类型.当你第一次看到用OCaml编写的代码时,缺少显式类型会给它带来静态类型安全性的动态类型语言的无杂乱外观.我认为动态语言的可选静态类型(一个好主意)最终会被类型推断所取代,而从现在起10年后,静态与动态的争论将毫无意义.

  • 这个评论已经过时了。 (6认同)
  • F# 现已在 Linux 和 Mac 上得到正式支持。 (2认同)

Har*_*son 15

对于像你这样的人(可能是静态类型,OO,命令性背景)的最佳推荐是Scala.Scala是一种功能强大的混合体,它比OO和大多数其他语言更好地支持OO.Scala编译为JVM字节码(也支持.net,尽管使用得少得多),并提供了非Java JVM语言之间无法比拟的Java互操作性.我在编译器中使用Scala,并且发现编写Scala代码异常有趣且令人满意.学习Scala的最佳资源是Scala 编程,由语言设计师自己编写.

如果你不想要一种混合语言,而是喜欢直接进入FP的战斗,我会选择Haskell.Haskell是一种纯函数式语言; 没有(一流的)可变性或影响的概念.我最喜欢的Haskell资源是诙谐的学习你是一个很好的Haskell!.事实上,无论你是否打算使用Haskell,我都非常推荐阅读一些LYAH,因为它是对静态类型FP世界的精彩介绍.在考虑语言选择之前,我开始阅读它.

希望这个答案有所帮助.


SK-*_*gic 7

类型理论首先应用于函数式编程(类型化的lambda演算),早在任何命令式语言之前.

对于最先进的静态类型系统(在命令式世界中你找不到任何可比的东西),请查看CoqAgda.

  • 实际上,类型理论来自同样的数学传统,它给了我们lambda演算和图灵机,并且早于编程语言. (4认同)

Mat*_*ggs 5

haskell跳跃于脑海(虽然它的类型系统可能是最先进的),ML系列语言,F#AFAIK.