推 ccshan:有亮白色這段 就等於有兩個var "(define y 9) (display y)" 01/11 09:02
→ ccshan:所以結果應該是 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 9 9 10 01/11 09:03
→ ccshan:所以總結: scope不受call/cc影響, call/cc如同一般函數. 01/11 09:04
→ suhorng:謝謝!! 所以是他的實做出錯了 01/11 11:30
→ suhorng:我也覺得會影響到很奇怪..使用cont的時候應該要把目前的 01/11 11:30
→ suhorng:evaluation context拋棄掉才對@@ 01/11 11:30
→ suhorng:可是我也沒有去研究 R^5RS 給的 formal semantics.. 01/11 13:15
阿..還是說那邊那個 define 是不合法的...?
對不起, 那個 define 是不合法的... 我想想看有沒有其他改法
※ 編輯: suhorng 來自: 118.166.51.251 (01/11 13:39)
※ 編輯: suhorng 來自: 118.166.51.251 (01/11 15:26)
新的 code 是這樣
(define var 0)
(let ((cont (call/cc (lambda (k) (k k)))))
(display var) (newline)
(cond ((= var 0) (set! var 1)
((lambda (unused)
(define var 2)
(display var)
(newline)
(cont cont) ) #f))
((= var 1) (display "ok"))
(#t (display "shadowed\n")) ))
執行結果很正常...之前真的是我 define 用的不合法
抱歉QQ
不過不知道為什麼一開始的 display var 顯示是 #undefine..
※ 編輯: suhorng 來自: 118.166.51.251 (01/11 15:40)