C/ c++中的函数式编程

Functional programming in C/C++?

本文关键字:函数 编程 c++      更新时间:2023-10-16

我一直在阅读这篇文章:http://en.wikipedia.org/wiki/Function_pointer,我有点困惑。由于C/c++支持函数指针,这是否意味着它们一般都支持函数式编程?请注意,我实际上并不想使用C或c++进行函数式编程,但我很好奇,因为我从未听说过C或c++支持这样的事情。(我知道在C语言中存在许多函数式编程语言的编译器,但这不是我所说的"支持"的真正意思)。

函数式编程(如果你真的感兴趣,请查阅它)与函数指针或缺少函数指针几乎没有关系。

c++是一种多范式语言,对FP有大量的支持,尤其是后来的版本。许多与WG21一起工作的人都喜欢FP,并希望得到支持。在c++ 11中,我们甚至引入了lambda,在c++ 14中,多态lambda首次亮相。这涵盖了很多东西。当函数仍然是二等公民时,lambda可以很好地接管。

不幸的是,尾递归处理仍然不是强制性的,但编译器实际上处理它,在过去的十年中,当你搞砸了const重载时,甚至可以方便地报告"无限递归"。:)

在c++中使用FP风格可以走得很远,学习它可以帮助你写出更好的代码,即使你选择了其他风格。我鼓励大家学习SICP

编辑:我不知道为什么这个答案会受到如此多的憎恨。这个问题特别询问了函数指针,以及它们的存在是否意味着c++支持"一般的函数式编程"。

用一种技术的,不是很有用的方式:yes*。"函数式"编程的真正本质是函数是值。C和c++在容易创建和销毁词法闭包方面不会给您任何帮助,在部分应用程序方面也不会给您任何帮助。事实上,您可以使用函数指针来模拟函数的行为有点像值,这实际上只是等效表达性语言的结果。试图将它与"函数式编程"混为一谈,真的是在深入图灵的领域。

*真正的技术区别是,C和c++实际上没有任何函数类型的。函数指针与函数值是不同的,即使你眯着眼睛看它们看起来有点像。

您可以使用c++进行函数式编程,尽管该语言并没有提供确切的帮助。在一阶函数式编程中,您只需尽可能多地使用不可变值,这当然很容易,虽然并不完全容易,但您实际上可以实现单子!