是的,延續可以是相當令人費解的。這裏有一個很好的拼圖,我發現了一段時間後 - 揣摩集團的印刷什麼,以及爲什麼:這是如何工作
(define (mondo-bizarro)
(let ((k (call/cc (lambda (c) c)))) ; A
(write 1)
(call/cc (lambda (c) (k c))) ; B
(write 2)
(call/cc (lambda (c) (k c))) ; C
(write 3)))
(mondo-bizarro)
說明(含劇透!):
- 第一
call/cc
店返回它自己的延續並將其存儲在k
中。
- 編號
1
被寫入屏幕。
- 當前的延續,這是繼續在B點,返回到K,這返回到
- 這一次,K,必定將我們在B處
- 得到了延續數
1
再次被寫入屏幕
- 當前的延續,這是繼續在B點,返回到K,這是另一個(但不同的)延續到另一個點B
- 一旦我們回到原來的延續,它是重要的是要注意,這裏k仍然是必然的A
- 數量
2
寫入屏幕
- 當前的延續,這是繼續在C點,返回到K,這返回到
- 這一次,K,必定將我們在得到了延續ç
- 數
1
再次寫入到屏幕
- 當前的延續,其是繼續在B點,則返回到k,它返回到C
- 數
3
被寫入到屏幕
- And you're done
因此,正確的輸出是11213
。我用粗體文字寫出了最常見的問題 - 重要的是要注意,當使用延續來重置k值時,它不會影響原始延續中k的值。一旦你知道它變得更容易理解。
嗯,是的,這是在摧毀我的大腦。 csi說結果是11213,但我只能理解'112'......我一定錯過了一些東西! – 2009-04-16 22:39:54