メモ
sub cons { #construct Pair Data my ($x, $y) = @_; return sub { my $m = shift; #dispatch if ( $m == 0) { return $x; }elsif ($m == 1) { return $y; } }; } sub car { #$z must be Pair Data my $z = shift; $z->(0); } sub cdr { my $z = shift; $z->(1); } my $pair = cons('a' ,'b'); print car($pair); # a print cdr($pair); # b
入れ子にするとダメだけど
新しいデータ型を作るにあたって
と考える。もっともふつーのオブジェクト指向の書き方をすればこんな事を考えなくてすむんだけど、基本的な手続きとクロージャだけでオブジェクト指向風にするにはどうすればいいのかという点を。