先週は電車通勤+歩きで仕事場を行き来したので、電車の中で、英語漬けで英語のトレーニングしてみたり、普通のHaskellプログラミング読んだりと、電車通勤はなかなか有意義なことに気付かされた。特に普通のHaskellプログラミングは第一部を読み終えたことで、高階関数と変数の束縛というものがわかったような気がした?
、、、、したのかどうかまだよくわからんので、自分の理解力を認識するために少し書いてみた。
まず、言葉の定義を。
- 変数の束縛
- (例えば)関数という値があり、それが変数名を束縛している
- 高階関数
- 関数を返したり引数にとったりする関数
- 変数が関数に束縛されているから、関数を変数として扱うことが出来る?
- それとも関数を変数として扱うことことが出来れば高階関数はつくれるのか?
perlでも変数を束縛することが出来れば高階関数など扱えるのかなと。クロージャ使えってことか?と思って調べて見ると面白そうなのが。
- http://d.hatena.ne.jp/naoya/20060109/1136812096
- http://d.hatena.ne.jp/tociyuki/20051022/1129952410
- http://d.hatena.ne.jp/palmo/20060509/curry
- http://torus.jp/memo/x200509/perl_higher_order_xml.rd.html
(って全部一度は見たことあるじゃん。でもワカンネとか言って放り出した気が、、、、)
ぱるも日記ではカリー関数を作る例が示されていたが、関数を返す高階関数の例ですな。カリー化に関しては、これなど面白かった。
torus solutions!は僕がblosxomをいじくるときにかなり参考にさせてもらったサイトです。
XML を Perl の高階関数で。 : torus solutions!
XML::LibXML で XML を作るときに、 いちいち createElement とか appendChild とか書くのに飽きてきたので、 高階関数版を作ってみた。これも、関数を返すといってよいのでしょう。
関数を引数にとる高階関数をperlで書けるのだろうか?というのが気になるところだが、関数のリファレンスを引数にとる関数を書けばいいのかなと思ってこれまた調べてみた。
ここまでの関数を返す関数とか関数を引数にとる関数を考えると、perlでの(関数による)変数の束縛ってのは、関数のリファレンスを変数として扱うことでなされると考えてよいのかな。
Higher-Order Perl: Transforming Programs with Programs
Mark Jason Dominus
Morgan Kaufmann / 5692円 ( 2005-03-28 )
Mark Jason Dominus
Morgan Kaufmann / 5692円 ( 2005-03-28 )
Higher-order Perlも気になる