【问题标题】:Functional programming in C/C++?C/C++ 中的函数式编程?
【发布时间】:2013-05-30 05:47:57
【问题描述】:

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

【问题讨论】:

  • @cdbitesky,我认为这有点不公平。在试图确定函数指针在一般情况下允许函数式编程中的作用时,这个问题是相对精确的。显然,我们可以对“函数式编程”的技术定义提出一些质疑,但我想我已经在回答中解决了这个问题。

标签: c++ c functional-programming function-pointers


【解决方案1】:

函数式编程(如果您真的感兴趣,请查看)与函数指针关系不大或缺少函数指针。

C++ 是一种多范式语言,大量支持 FP,尤其是后期版本。许多与 WG21 合作的人都喜欢 FP 并寻求支持。在 C++11 中,我们甚至得到了 lambda,在 C++14 中,多态 lambdas 首次亮相。这涵盖了很多事情。虽然函数仍然是二等公民,但 lambda 可以很好地接管。

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

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

【讨论】:

  • 我现在实际上正在尝试学习 OCaml,这就是我探索 Wikipedia 并遇到函数指针的原因。我想我在没有真正理解什么是函数式编程的情况下就问了这个问题。
【解决方案2】:

编辑:我不确定为什么这个答案会受到如此多的讨厌。该问题专门询问函数指针,以及它们的存在是否意味着 C++ 支持“一般的函数式编程”。

以一种技术性的、不是很有用的方式:是的*。 “函数式”编程的真正本质是函数是值。 C 和 C++ 在lexical closures 的轻松创建和销毁等方面不会给您任何帮助,在partial application 方面也不会给您任何帮助。您可以使用函数指针来模拟行为有点像值的函数的外观这一事实实际上只是等效表达性语言的结果。试图将其与“函数式编程”混为一谈真的是在深入图灵 tarpit。

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

【讨论】:

  • 函子呢?它们是使用 STL 的标准方式。在 C++11 中有单态 lambda,而在 C++14 中有泛型 lambda。
  • 您可以选择将我的答案解释为 C++14 的错误。这个问题实际上是关于函数指针的。
【解决方案3】:

您可以使用 C++ 进行函数式编程,尽管该语言并不能完全提供帮助。一阶函数式编程,您尽可能简单地使用不可变值当然很容易,虽然不是很容易,但您实际上可以实现monads

【讨论】:

    猜你喜欢
    • 2015-12-19
    • 2017-10-02
    • 2010-10-06
    • 2010-11-08
    • 2011-05-15
    • 2011-12-07
    • 2017-10-01
    • 1970-01-01
    • 2016-07-12
    相关资源
    最近更新 更多