LoginSignup
3
3

More than 5 years have passed since last update.

函数ポインタ実演

Posted at

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を実装する機会に恵まれれば、是非やってみたいなと思いながら今回は諦めることになりそうです。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3