- 735 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 09:55:33 ]
- プログラムのトップレベルでの(begin <表現形式1> ...)は、beginのボディを形成する連続する式、定義、構文定義に等しい。(R5RS 5.1)
(display (call/cc (lambda (c) (set! cc c) (cc 'hoge)))) (display 'fuga) (cc 'moga) においてcall/ccが返し、ccに記憶される継続は (lambda (x) (print (display x)) (loop (print (eval (read) (interactive-environment))))) と看做せるから無限ループに陥らない。 他方、 (let () (display (call/cc (lmabda (c) (set! cc c) (cc 'hoge)))) (display 'fuga) (cc 'moga)) においてcall/ccが返し、ccに記憶される継続は (lambda (x) (display x) (display 'fuga) (cc 'moga)) と看做せるから無限ループに陥る。 (ccの末尾再帰呼出し) beginをR5RS巻末のように合成構文として実装すると後者になるが 原始構文として規格通りに実装すると前者となる。
|

|