c - C 中的高阶函数

标签 c functional-programming higher-order-functions

在 C 中是否有一种“正确”的方式来实现高阶函数。

我主要好奇的是这里的可移植性和语法正确性,以及是否有不止一种方法的优缺点。

编辑: 我想知道如何创建高阶函数的原因是我编写了一个系统来将 PyObject 列表(调用 python 脚本时得到的)转换为包含相同数据但组织方式不依赖于的 C 结构列表python.h 库。所以我的计划是有一个函数,它遍历 pythonic 列表并对列表中的每个项目调用一个函数,并将结果放在一个列表中,然后返回。

所以这基本上是我的计划:

typedef gpointer (converter_func_type)(PyObject *)

gpointer converter_function(PyObject *obj)
{
    // do som stuff and return a struct cast into a gpointer (which is a void *)
}

GList *pylist_to_clist(PyObject *obj, converter_func_type f)
{
   GList *some_glist;
   for each item in obj
   {
       some_glist = g_list_append(some_glist, f(item));
   }
   return some_glist;
}

void some_function_that_executes_a_python_script(void)
{
   PyObject *result = python stuff that returns a list;
   GList *clist = pylist_to_clist(result, converter_function);
}

并澄清问题:我想知道如何在更安全和更正确的 C 中做到这一点。我真的很想保持高阶函数风格,但如果不赞成这样做,我非常感谢其他方法方式。

最佳答案

从技术上讲,高阶函数只是接受或返回函数的函数。所以像 qsort 这样的东西已经是高阶的了。

如果您的意思更像是函数式语言中的 lambda 函数(这是高阶函数真正有用的地方),那么这些函数要难得多,并且不能在当前的标准 C 中自然地完成。它们只是不是语言的一部分。 Apple 的 blocks extension 是最好的选择。它只适用于 GCC(和 LLVM 的 C 编译器),但它们确实很有用。希望这样的事情会流行起来。以下是一些相关资源:

关于c - C 中的高阶函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21870453/

相关文章:

javascript - 错误: function is not defined when calling a function returned by another function

c - 如何节省数组中未使用的空间?

Haskell Netwire - 类型错误

scala - 或 Else 如何处理偏函数

clojure - 匿名函数的正确语法

javascript - Node.js - 高阶一元函数 - 为什么需要这个?

c - 03优化后如何列出任意c程序使用的所有库函数

c - 无法访问嵌套结构中的值

c - 为什么我返回的结构在 c 中将负值更改为正值?

functional-programming - 有人可以澄清一下Joel On Software的报价是什么意思:(功能程序没有副作用)