考虑以下用 S-expr 表示法编写的代码段:
(lambda (x) (lambda (y) (+ x y)))
或者在 Javascript 中:
function(x) { return function(y) { return x+y; }; }
我如何用 C 语言编写它?
最佳答案
这在 C 中很难做到,因为它依赖于闭包。使用 C 时,您必须传递显式上下文,因此您最终可能会得到类似这样的结果。
#include <stdio.h>
struct closure {
int saved_x;
int (*function)(struct closure, int);
};
int second_half_add(struct closure context, int y) {
return context.saved_x + y;
}
struct closure curried_add(int x) {
struct closure ret;
ret.saved_x = x;
ret.function = second_half_add;
return ret;
}
int main() {
struct closure context = curried_add(3);
printf("%d\n", context.function(context, 4));
}
这真的很难看,你几乎失去了柯里化(Currying)的所有好处,但这是可能的
关于c - 这个熟悉的函数在 C 中是如何实现的呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7448467/