Scheme 调用/cc是堆栈帧的副本还是执行中的实际跳转?

Scheme 调用/cc是堆栈帧的副本还是执行中的实际跳转?,scheme,infinite-loop,continuations,continuation-passing,callcc,Scheme,Infinite Loop,Continuations,Continuation Passing,Callcc,我不明白以下内容如何不建立无限循环: (define call/cc call-with-current-continuation) ; ccc alias (define return #f) ; declare a global variable 'return' (+ 1 (call/cc (lambda (cont) ; setup continuation with 'cont' as the exit procedure (set! return c

我不明白以下内容如何不建立无限循环:

(define call/cc call-with-current-continuation) ; ccc alias
(define return #f) ; declare a global variable 'return'

(+ 1 (call/cc (lambda (cont) ; setup continuation with 'cont' as the exit procedure
                (set! return cont) ; set global var 'return' to the exit procedure
                1))) 

(return 22) ; 23
当我调用
(return 22)
时,我跳回continuation,但使用传递的值22作为
调用/cc
表单的新计算结果。这会不会导致
(返回22)
作为下一条语句进行计算,从而建立一个无限循环

我知道它不是一个无限循环,但我不明白为什么它不是。

它是一个无限循环。然而,在大多数方案实现中,顶级表单是在中进行评估的

如果您将表达式放入一个
(let()…)
,您肯定会看到无限循环的效果。

看看是否有帮助。