JavaScriptとかで書いてて便利な無名関数。
perlでも出来たら何か便利かなぁ。
my $sub = sub {print @_, "\n";};
&$sub('Hello,world!');
#実行結果
Hello,world!
関数型言語って何がすごいんですか – Gemmaの日記
にあるJavaScriptの例をperlで書いてみる。
sub rocket{
my $n = shift;
return sub {
if ($n){
print $n,"\n";
$n--;
} else{ print "liftoff\n"; }
}
}
my $f = rocket(3);
my $g = rocket(3);
&$f();
&$f();
&$f();
&$f();
&$g();
&$g();
#実行結果
3
2
1
liftoff
3
2
ちょっと面白い。
リンク先のエントリーのコメント
これは関数型言語というより,クロージャのオブジェクト指向的使い方.
とある。純粋な関数型言語には出来ないらしい。例題としてはちょっとずれてるんじゃないの?との事。
ま、いっか。
2011-02-28追記
関数の実行はモダンな書き方だと以下の感じ?
# 両方同じ意味 &$f(); $f->();
カテゴリー: perl - Trackback Uri


[...] This post was mentioned on Twitter by perl ism and クリックテクス, AnyEvent::PerlIsm. AnyEvent::PerlIsm said: RT @clicktx: ちょっと実験してみた。出来るもんなのだね。 perlで関数型言語(風)の処理 – 変数に [...]