で、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

でも、
ディスパッチャをいちいち書かなくちゃいけいし、
クロージャの環境に外部からアクセスするコードを追加するたびにディスパッチャを修正するなんて、
ちょっとナンセンスだなぁと思いました。