Cの函数ポインタをほとんど触ったことがなかったので勉強がてら組んで見ました。
以下はC言語の函数としてSKIコンビネータ(正確にはコンビネータではない)を組んでみたものです
ski.c
#include <stdio.h>
void* I(void* x){
return x;
}
void* K(void* x, void* y){
return x;
}
void* S(void* (*x)(void*, void*), void* (*y)(void*), void* z){
return (*x)(z, (*y)(z));
}
void out(int a){ printf("here!:%d",a); }
int main(void)
{
// SKK = I
void (*f)(int) = S(K,K,out);
(*f)(10);
return 0;
}
S,K,Iの函数を作って組み込むことは出来ましたが、問題はCでは呼び出しの時に変数の数も揃える必要があるのでカリー化が上手く出来ず、例えばSKなどを函数として扱いたくてもS(K,a,b)のa,bに当たる函数を用意する必要が出てくるという事でした。
もしも今後Lazy Kを実装する機会に恵まれれば、是非やってみたいなと思いながら今回は諦めることになりそうです。