当前位置:  开发笔记 > 编程语言 > 正文

如何在C中实现Lazy Evaluation?

如何解决《如何在C中实现LazyEvaluation?》经验,为你挑选了2个好方法。

举个例子,

以下python代码:

def multiples_of_2():
  i = 0
  while True:
    i = i + 2
    yield i

我们如何将其转换为C代码?

编辑:我希望将此python代码转换为C语言中的类似生成器,并使用next()函数.我不想要的是如何在C中创建一个函数来输出2的倍数.2的倍数仅仅是一个例子来说明C中的惰性eval生成器的问题.



1> jdb..:

您可以尝试将其封装在struct:

typedef struct s_generator {
    int current;
    int (*func)(int);
} generator;

int next(generator* gen) {
    int result = gen->current;
    gen->current = (gen->func)(gen->current);
    return result;
}

然后你定义你的倍数:

int next_multiple(int current) { return 2 + current; }
generator multiples_of_2 = {0, next_multiple};

你通过电话获得下一个倍数

next(&multiples_of_2);


@jdb:您应该更新答案.`nest_multiple`和`&nest_multiple`是一回事,因为地址运算符总是隐含地存在于函数指针中.

2> Greg Hewgill..:

我最近在C中找到了一篇关于协同程序的好文章,其中描述了一种方法.这当然不适合胆小的人.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有