我被告知以下表达式旨在评估为0,但Scheme的许多实现将其评估为1:
(let ((cont #f))
(letrec ((x (call-with-current-continuation (lambda (c) (set! cont c) 0)))
(y (call-with-current-continuation (lambda (c) (set! cont c) 0))))
(if cont
(let ((c cont))
(set! cont #f)
(set! x 1)
(set! y 1)
(c 0))
(+ x y))))
Run Code Online (Sandbox Code Playgroud)
我必须承认,我不知道从哪里开始.我理解延续的基础知识call/cc,但是我可以得到这个表达式的详细解释吗?