相关疑难解决方法(0)

Letrec和reentrant延续

我被告知以下表达式旨在评估为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,但是我可以得到这个表达式的详细解释吗?

scheme continuations letrec

5
推荐指数
1
解决办法
301
查看次数

标签 统计

continuations ×1

letrec ×1

scheme ×1