什么时候一种语言有资格成为功能语言?

When a language qualifies as a functional language?

一种语言应该具备哪些特征才能成为功能性语言?什么时候我们可以说一种语言 XYZ 支持函数范式?

What are the traits a language should have to be qualified as a functional language? When we can say that a language XYZ supports functional paradigm?

这是两个不同的问题。我会说 "supporting functional paradigm" 意味着:

  • 您可以像处理其他类型一样处理函数(在局部变量、参数等中使用它们)
  • 您可以内联定义匿名函数(a.k.a.lambda 函数)
  • 匿名函数可以访问在其环境中声明的变量(这称为闭包)

根据这个定义,几乎所有现代主流编程语言都支持函数范式(C 除外)。

要归类为 "functional language",一门语言需要将函数式范式作为其主要或唯一范式,包括不变性和纯(无副作用)函数。除了上述之外,这通常意味着:

  • 支持声明不可变类型,如区分联合
  • 支持模式匹配
  • 函数体由表达式组成,而不是语句