[問題] call/cc 變數的值 印出的結果應該是?

作者: suhorng ( )   2013-01-11 00:45:47
各位好
因為實在搞不懂 call/cc 以及一些環境, scope 的問題, 想要請教一下
(define var 0)
(let
((cont ( call/cc (lambda (k) (k k)) )))
(set! var (+ var 1))
(display var) (newline)
(cond ((< var 10) (define var 9) (display var) (newline) (cont cont))
(#t #t)))
以上這段程式 到底該輸出什麼呢?
若沒有亮白色那段, 輸出應該就是
1 1 2 2 ... 9 9 10
但是有亮白色這段 還會是這樣嗎? chicken 編譯器跑出來變 1 9 10 @@
作者: ccshan (善終結)   2013-01-11 09:02:00
有亮白色這段 就等於有兩個var "(define y 9) (display y)"所以結果應該是 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 9 9 10所以總結: scope不受call/cc影響, call/cc如同一般函數.
作者: suhorng ( )   2013-01-11 11:30:00
謝謝!! 所以是他的實做出錯了我也覺得會影響到很奇怪..使用cont的時候應該要把目前的evaluation context拋棄掉才對@@可是我也沒有去研究 R^5RS 給的 formal semantics..

Links booklink

Contact Us: admin [ a t ] ucptt.com