で、Schemeは名前の階層化がないので、実用にはちょっとつらいよなぁ
と思うときがあったりします。
SICPなんか読むと、
Schemeでもオブジェクト指向っぽくメッセージパッシングができてすごいんだぜ、なんてのがありました。
確かこんなやつ(実行させてないのでエラーが多分出ます)。
(define (foo x) (define (readx) x) (define (incx) (set! x (+ x 1))) (define (dispatch m) (cond ((eq? m 'r) (readx)) ((eq? m 'i) (incx)))) dispatch) (define o (foo 10)) (o 'r) 10 (o 'i) (o 'r) 11
でも、
ディスパッチャをいちいち書かなくちゃいけいし、
クロージャの環境に外部からアクセスするコードを追加するたびにディスパッチャを修正するなんて、
ちょっとナンセンスだなぁと思いました。