Perl - カリー化?
http://d.hatena.ne.jp/kazu-yamamoto/20110906/1315279311
ここに書いてあることを Perl でやってみる。
定義2
カリー化 =「複数の引数を取る関数」を「一引数を取る関数のチェインに直す」こと
my $plus = sub { my $x = shift; return sub { my $y = shift; return $x + $y; }; }; say $plus->(1)(2); # currying!
定義3
カリー化 =「構造体を一つ取る関数」を「構造体のメンバーを複数の引数にばらし、一引数を取る関数のチェインに直す」こと
my $plus_array = sub { my $array_ref = shift; return $array_ref->[0] + $array_ref->[1]; }; say $plus_array->([1,2]); sub curry { my $code_ref = shift; return sub { my $x = shift; return sub { my $y = shift; return $code_ref->([$x, $y]); }; }; } my $curry_plus_array = curry($plus_array); say $curry_plus_array->(1)(2); # currying! print Dumper [ map { $plus->(1)($_) } 1..3 ];