海野秀之(うんのひでゆき)の外部記憶
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))) のように書けば、 古いバージョンでも動きます(つまり、こういうバグでした)。