メモ

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

入れ子にするとダメだけど


新しいデータ型を作るにあたって

と考える。もっともふつーのオブジェクト指向の書き方をすればこんな事を考えなくてすむんだけど、基本的な手続きとクロージャだけでオブジェクト指向風にするにはどうすればいいのかという点を。