カリー化とは何でしょうか?例えば,f(a,b)=a+bという関数をfについてカリー化した場合,f(a)=g ※g(b)=a+bみたいな感じになるという事ですよね?例えば,C言語風にカリー化のプロセスを書くならばint add(int a, int b) return a+b;void main(void) add(1,2);みたいなプログラムを,int a;int b;int curried_add1(int n){ a=n; return curried_add2(2);}int curried_add2(int n) return a+n;void main(void) curried_add1(1);みたいな感じに書き直という事ですか?

1件の回答

回答を書く

1016926

2026-02-09 03:10

+ フォロー

static int s_first = 0;



int (*)(int) add( int second )

{

return( first + second );

}



int (*)(int) make_curried_add( int first )

{

s_first = first;

return(add);

}



void main(void)

{

int (*curried_add)(int);



curried_add1 = make_curried_add(1);

curried_add2 = make_curried_add(2);

curried_add3 = make_curried_add(3);



printf(\u0026quot;%d\u0026quot;, curried_add1(2));

printf(\u0026quot;%d\u0026quot;, curried_add2(2));

printf(\u0026quot;%d\u0026quot;, curried_add3(2));

}



$ ./a.out

3

4

5



こっちの方が近いと思います。ですがC言語だと正しい意味でのカリー化を実現できません。もしも上記の例を実際に行なうと、make_curried_add() を異なる引数で複数回呼んでも返される関数は全て同じ内容になり最後の引数で上書きされます。

なので実際には



$ ./a.out

5

5

5



になります。

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有