- 487 名前:デフォルトの名無しさん [2005/06/28(火) 12:56:20 ]
- 理解に苦しんでいるstatic scopeの話がちょうど出たようですので、
質問させてください。 ;;; 例-A ---------------------------------------- A1> (define foo begin) A2> (define bar (lambda (a b c) (foo a b c))) A3> (bar #t 0 1) ;;==> 1 A4> (define foo list) A5> (bar #t 0 1) ;;==> 1 ;;; 例-B ---------------------------------------- B1> (define foo (lambda (m) (- m 3))) B2> (define bar (lambda (n) (foo n))) B3> (bar 10) ;;==> 7 B4> (define foo (lambda (m) (+ m 3))) B5> (bar 10) ;;==> 13 例-Aのほうは、fooをtop-levelで再定義(A4)しても、 barを呼び出したとき(A5)には、手続き定義時(A2)の 環境が使われています。 これはstatic scopeの考え方からすると当然だと 思えるようになりました。 ところが、例-Bのほうは、 fooを再定義(B4)すると、手続き呼び出し時(B5)には 手続き定義時(B2)のfooではなく、再定義されたfooが 使われています。 この違いは何でしょうか?
|

|