Joh*_*oee 18 c++ functional-programming c++11
我想知道C++ 0x(C++ 11)(带有lambdas和完美转发)是否是函数式语言的超集.有没有C++没有的函数式语言的特性?
Chr*_*oph 15
函数式编程范例将计算模型化为集合之间的关系,因此具有内在的声明性.但是,在实践中,我们经常将函数视为命令式,即您输入一个输入值并输出一个输出值,与过程相同.从这个观点来看,函数的特征性质是它没有副作用.由于术语含糊不清,我们称这样的函数是纯粹的,只有纯函数的语言才是纯粹的函数式语言.
然而,并非所有函数式语言都是纯粹的:函数式语言是一种具有语法和语义的语言,它允许程序员有效地使用函数式范例.使用范式可行的一些概念包括 - 除其他外 - 具有词汇闭包的lambda表达式,高阶函数,变体类型和模式匹配,惰性求值,类型推断(在静态类型语言的情况下).
这绝不是一个授权列表,一种语言可以在不提供全部甚至大部分语言的情况下正常运行,但是如果一种语言可以 - 即使它们可以使用而不必跳过主要的箍 - 它们的存在是一个强有力的指标该语言应被视为功能性的.
我不太了解Boost来决定C++ 03 + Boost是否是一种可行的函数式语言,但C++ 0x肯定会使C++ 更具功能性,甚至可能将它推到函数式语言领域的主观边界上.
顺便说一句,同样的考虑也适用于其他编程范例:C++也不是纯粹的面向对象语言(事实上,设计一种既纯粹功能又纯粹面向对象的语言,实际上甚至在理论上也是不可能的)和大多数通常与OO语言(类,继承,封装)相关联的功能实际上也绝不具有授权性......
查看C2维基上的函数式编程语言定义和讨论列表.
一些最常见(和最少争议的功能)是:
function类表示第一类函数.const.auto