Я читал о call-with-current-continuation
, особенно в Scheme, и читал различные статьи на многих веб-сайтах. Однако я до сих пор не понимаю, как работает поток управления при использовании call-with-current-continuation
.
Например, учитывая приложенный ниже код, как вызывается продолжение и всякий раз, когда оно вызывается, как управление проходит через тело этой процедуры?
(define call/cc call-with-current-continuation)
(define showit (lambda (a b)
(begin (display a) (display b) (display " "))))
(define f
(lambda (n)
(let ((p (call/cc (lambda (k) k))))
(begin
(showit ’f= n)
p))))
Кроме того, когда эта процедура запускается с использованием ((f 2) (f 4))
, это приводит к бесконечному циклу с таким шаблоном:
Может ли кто-нибудь объяснить причину бесконечного цикла? Примечание: использование Drracket с R5RS