遠藤です。

08/02/11 に Yukihiro Matsumoto<matz / ruby-lang.org> さんは書きました:
> まつもと ゆきひろです
>
> In message "Re: [ruby-dev:33676] Suggestion: Proc#curry"
>    on Sat, 9 Feb 2008 20:40:19 +0900, "Yusuke ENDOH" <mame / tsg.ne.jp> writes:
>
> |http://subtech.g.hatena.ne.jp/cho45/20071119/1195420784
> |で提案されている Proc#curry を組み込むのはどうでしょうか。
> |
> |proc {|x, y, z| x + y + z }.curry
> |
> |proc {|x| proc {|y| proc {|z| x + y + z } } }
> |と同じ意味になります。
>
> うーん、カリー化って

カリー化というのは、「n 個の引数を同時に受け取って実行する関数」を、
「引数を 1 個ずつ n 回の呼び出しに分けて受け取った後に実行する関数」
に変えることです。
型で言うなら (a×b×c×d)->z な関数から a->b->c->d->z な関数にする
ことです。


>  f = proc{|x, y, z| x + y + z }
>  f2 = f.curry(2)
>  f3 = f2.curry(3)
>  f3[4]  # => 9
>
> ってAPIなんじゃないんでしょうか。それともたいした違いじゃな
> い?

これはカリー化ではなくて部分適用ですね。これはこれで意味がある
かもしれません。

-- 
Yusuke ENDOH <mame / tsg.ne.jp>