[問題] 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數位生活區 即時熱門文章
                            12
                        
                            32