История изменений
Исправление monk, (текущая версия) :
Передаем только в случае cps (ну как в sbcl) а при нативной реализации ничего никуда не передается.
(define (test f)
(let ((i 0))
(f)
(set! i (+ i 1))
i))
По твоему утверждению в функцию f ничего не передаётся. Теперь делаем так:
(define the-continuation #f)
(define (fun) (call/cc (lambda (k) (set! the-continuation k))))
(test fun)
(the-continuation) -> 2
(the-continuation) -> 3
Обрати внимание, в функции call/cc внутри fun внезапно оказался доступ к переменной i из test и к куску кода после вызова f. Откуда?
Исходная версия monk, :
Передаем только в случае cps (ну как в sbcl) а при нативной реализации ничего никуда не передается.
(define (test f)
(let ((i 0))
(f)
(set! i (+ i 1))
i))
По твоему утверждению в функцию f ничего не передаётся. Теперь делаем так:
(define the-continuation #f)
(define (fun) (call/cc (lambda (k) (set! the-continuation k))))
(test fun)
(the-continuation) -> 2
(the-continuation) -> 3
Обрати внимание, в функции call/cc внутри fun внезапно оказался доступ к переменной i из test и к куску кода после вызова f. Откуда?