A Y комбинатор петля? Это достаточно особенное, чтобы быть только яблоком (пока). Также достаточно особенный для утечки памяти повсюду
#include <stdio.h>
#include <Block.h>
typedef void * block;
typedef block (^block_fn)(block);
typedef void (^int_fn)(int);
int main(int argc, char ** argv) {
block_fn Y = ^ block(block f) {
return ((block_fn) ^ block(block_fn x) {
return x(x);
})(^ block(block_fn x) {
return ((block_fn)f)(Block_copy(^ block(block y) {
return ((block_fn)(x(x)))(y);
}));
});
};
int_fn loop = Y(^ block(int_fn f) {
return Block_copy(^ (int a) {
if (a <= 0) {
printf("loop done\n");
} else {
printf("loop %d\n", a);
f(a - 1);
}
});
});
loop(10);
return 0;
}