我想知道C++0x (C++11) (具有lambda和完美转发)是否是函数式语言(超集)。函数式语言中有没有C++没有的特性?
发布于 2011-02-01 04:48:09
函数式编程范式将计算建模为集合之间的关系,因此本质上是声明性的。然而,在实践中,我们经常认为函数是命令式的,即你输入一个输入值,然后输出一个输出值,就像一个过程一样。从这个角度来看,函数的特征属性是它没有副作用。由于术语的模糊性,我们称这样的函数为纯函数,只有纯函数的语言才是纯函数语言。
然而,并不是所有的函数式语言都是纯粹的:函数式语言是一种具有语法和语义的语言,它允许程序员有效地使用函数式范例。使得使用该范式可行的一些概念包括-以及其他-带有词法闭包的lambda表达式、高阶函数、变体类型和模式匹配、惰性计算、类型推断(在静态类型语言的情况下)。
这决不是一个权威性的列表,一种语言在不提供全部甚至大部分功能的情况下也可以很好地实现功能,但如果一种语言提供了--即使它们在不需要跳跃主要障碍的情况下变得可用--它们的存在就是一个强烈的迹象,表明该语言应该被认为是功能的。
我对Boost的了解还不够多,无法决定C++03 + Boost是否是一种可行的函数式语言,但C++0x确实让C++变得更加函数式,甚至可能将其推向函数式语言领域的主观边界。
顺便说一句,同样的考虑也适用于其他编程范式: C++也不是一种纯粹的面向对象的语言(实际上,设计一种既是纯函数式的,又是纯粹的面向对象的语言是非常困难的--甚至在理论上是不可能的),而且通常与OO相关的大多数特性(类、继承、封装)实际上也不是授权的……
发布于 2011-02-01 03:40:50
查看C2维基上的Functional Programming Languages定义和讨论列表。
一些最常见的(也是争议最少的)特性是:
可以用函数闭包( function objects.
function )--可以用赋值( classes.const.autohttps://stackoverflow.com/questions/4854774
复制相似问题