4

以下が無限ループを設定しない方法がわかりません。

(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)、継続に戻りますが、call/ccフォームの新しい評価結果として渡された値 22 が使用されます。それ(return 22)は次のステートメントとして評価され、無限ループを設定することになりませんか?

無限ループではないことはわかっていますが、そうでない理由がわかりません。

4

1 に答える 1