概述
是否有类似的方法从C过程迭代(带有yield)?
这是我找到的方法:
/* Example calculates the sum of the prime factors of the first 32 Fibonacci numbers */ #include <stdio.h> typedef enum{false=0,true=1}bool; /* the following line is the only time I have ever required "auto" */ #define FOR(i,iterator) auto bool lambda(i); yield_init = (void *)λ iterator; bool lambda(i) #define DO { #define YIELD(x) if(!yield(x))return #define BREAK return false #define CONTINUE return true #define OD CONTINUE; } /* Warning: _Most_ FOR(,){ } loops _must_ have a CONTINUE as the last statement. * * Otherwise the lambda will return random value from stack,and may terminate early */ typedef void iterator; /* hint at procedure purpose */ static volatile void *yield_init; #define YIELDS(type) bool (*yield)(type) = yield_init iterator fibonacci(int n){ YIELDS(int); int i; int pair[2] = {0,1}; YIELD(0); YIELD(1); for(i=2; i<n; i++){ pair[i%2] = pair[0] + pair[1]; YIELD(pair[i%2]); } } iterator factors(int n){ YIELDS(int); int i; for(i=2; i*i<=n; i++){ while(n%i == 0 ){ YIELD(i); n/=i; } } YIELD(n); } main(){ FOR(int i,fibonacci(32)){ printf("%d:",i); int sum = 0; FOR(int factor,factors(i)){ sum += factor; printf(" %d",factor); CONTINUE; } printf(" - sum of factors: %d\n",sum); CONTINUE; } }
从http://rosettacode.org/wiki/Prime_decomposition#ALGOL_68获得了这个想法 – 但它在C中读得更好
总结
以上是编程之家为你收集整理的C语言中的Python样式迭代器全部内容,希望文章能够帮你解决C语言中的Python样式迭代器所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧