我想知道 C++0x (C++11)(带有 lambdas 和完美转发)是否是函数式语言的(超集)。 函数式语言有什么 C++ 没有的特性吗?
最佳答案
函数式编程范式将计算建模为集合之间的关系,因此本质上是声明性的。然而,在实践中,我们通常认为函数是命令式的,即输入一个输入值并取出一个输出值,与过程相同。从这个角度来看,函数的特征是它没有副作用。由于术语的歧义,我们将这样的函数称为纯函数,而只有纯函数的语言将是纯函数语言。
然而,并非所有的函数式语言都是纯粹的:函数式语言是一种具有语法和语义的语言,它允许程序员有效地使用函数式范例。使使用范式可行的一些概念包括 - 除其他外 - 具有词法闭包的 lambda 表达式、高阶函数、变体类型和模式匹配、惰性求值、类型推断(在静态类型语言的情况下)。
这绝不是一个权威的列表,一种语言在不提供全部甚至大部分功能的情况下也可以很好地发挥作用,但如果一种语言提供 - 即使它们可用而不必跳过主要的箍 - 它们的存在是一个强有力的指标,表明该语言应该被认为是功能性的。
我对 Boost 的了解还不够,无法确定 C++03 + Boost 是否是一种可行的函数式语言,但 C++0x 确实让 C++更多 功能化,甚至可能插入它超越函数式语言领域的主观边界。
顺便说一句,同样的考虑也适用于其他编程范式:C++ 也不是一种纯粹的面向对象的语言(事实上,设计一种既是纯功能又是纯对象的语言非常困难 - 甚至在理论上是不可能的面向对象),并且通常与 OO 语言相关的大多数特性(类、继承、封装)实际上也没有任何权威性......
关于C++0x (C++11) 作为函数式语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4854774/