C言語でCurrying

と思ったら既にあった。http://d.hatena.ne.jp/shinichiro_h/20060119

厳密には。

#include <stdio.h>

int test(int i, int j) {
  return i+j;
}

static int _i;

int test1(int j) {
  return _i+j;
}

int (*test2(int i))(int) {
  _i = i;
  return test1;
}

厳密には「int (*)(int,int)」な関数test()を「int (*(int))(int)」な関数test2()に変換するところまでがCurry化で、test1()を生成する部分自体は部分適用という別のものらしい。Curry化と部分適用とをまとめて扱うことが多いので、Curry化という言葉が部分適用まで含むように使われるということだろうか。