ishiducaの日記 このページをアンテナに追加 RSSフィード

2011-02-18

カリー化 18:26 カリー化 - ishiducaの日記 を含むブックマーク はてなブックマーク - カリー化 - ishiducaの日記 カリー化 - ishiducaの日記 のブックマークコメント

カリー化 (currying) とは、計算機科学分野の技法の一つ。複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引数を取り結果を返す関数」であるような関数にすること。

JavaScriptだと、こんなふうに書くんだけど

function add (a,b) {
    if (! b) {
        return function (c) {
            return add(a, c);
        };
    }
    return a + b;
}

consolo.log(add(2, 3)); // 5
console.log(add(2)(3)); // 5

perlだと

sub add {
    my ($a, $b) = @_;
    if (! $b) {
        return sub {
            my $c = shift;
            add($a, $c);
        };
    }
    $a + $b;
}

print add(2,3);      # 5
print add(2)->(3);   # 5
# 一つ上と同じ
# print &{add(2)}(3);

my $add = \&add;

print $add->(4,5);    # 9
print $add->(4)->(5); # 9
exit 0;

でいいのか?


ところで、カリー化って何がうれしいのかな?

トラックバック - http://perl.g.hatena.ne.jp/ishiduca/20110218