海野秀之(うんのひでゆき)の外部記憶
Twitter (twilog) / RSS / アンテナ / ぶくま
sample4.scm:
(define f (lambda (x y) (display (op x y)) (display "\n"))) (define g (lambda (a b) (define op (lambda (a b) (+ (* a a) (* b b)))) (f a b))) (define h (lambda (a b) (set! op (lambda (a b) (+ (* a a) (* b b)))) (f a b))) (define op +) (f 2 3) (define op *) (f 2 3) (g 2 3) (h 2 3)
実行例:
% ./iscm0 < sample4.scm 5 6 6 13
g の中で define した変数は f からは見えない。
% gosh sample4.scm 5 6 6 13
ほっ。
ちなみに、このサンプルコードを動かすためには、バグをちこっと直す必要があった。
(define op +) じゃなくて (define op (lambda (x y) (+ x y))) のように書けば、 古いバージョンでも動きます(つまり、こういうバグでした)。