Я наткнулся на фрагмент, объясняющий Continuations, используя call/cc. В приведенном ниже фрагменте, что является продолжением для fn, вызываемого вызовом/cc, является весь блок let или строки ниже вызова/cc? Также может ли кто-нибудь объяснить, почему весь блок let не предоставляется в качестве продолжения?Что является продолжением вызова/cc в блоке let
#lang racket
(define resume-test-3 #f)
(define test-3 (lambda()
; the let defines a variable i local to the lambda, and
; sets its value to 0
(let ((i 0))
;
(call/cc (lambda (k) (set! resume-test-3 k)))
;
; The next time the-continuation is called, we start here.
(displayln "I am back ")
(set! i (+ i 1))
; and return the value i
i
)
))
(test-3)
(resume-test-3)
(resume-test-3)
Я предположил, что из примера. В '(+ 1 (вызов/cc (lambda (k) (k 2))) 3)', продолжение - '(fn [v] (+ 1 v 2))'. Но в случае '(let (bindings)' продолжение - это состояние операторов после вызова/cc. Я думаю (и я думаю, что я прав) let (bindings) можно переписать как lambda() с код внутри него в блоке do, поэтому продолжение - это фактически набор операторов после вызова/cc – draklor40