如何在C中实现这个熟悉的功能?
发布时间:2020-12-16 10:30:02 所属栏目:百科 来源:网络整理
导读:考虑以S-expr表示法编写的以下代码段: (lambda (x) (lambda (y) (+ x y))) 或者在Javascript中: function(x) { return function(y) { return x+y; }; } 我怎么用C写这个? 解决方法 这在C中很难做到,因为它依赖于闭包.使用C,你必须传递一个显式的上下文,所
考虑以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("%dn",context.function(context,4)); } 它真的很难看,你几乎失去了所有的好处,但它有可能 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |