加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在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));
}

它真的很难看,你几乎失去了所有的好处,但它有可能

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读