[問題] call/cc 變數的值 印出的結果應該是?
各位好
因為實在搞不懂 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 @@
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.166.51.251
推
01/11 09:02, , 1F
01/11 09:02, 1F
→
01/11 09:03, , 2F
01/11 09:03, 2F
→
01/11 09:04, , 3F
01/11 09:04, 3F
→
01/11 11:30, , 4F
01/11 11:30, 4F
→
01/11 11:30, , 5F
01/11 11:30, 5F
→
01/11 11:30, , 6F
01/11 11:30, 6F
→
01/11 13:15, , 7F
01/11 13:15, 7F
阿..還是說那邊那個 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)
PLT 近期熱門文章
PTT數位生活區 即時熱門文章