Я читал о call-with-current-continuation
, особенно в Схеме, и читал различные статьи на многих сайтах.Тем не менее, я до сих пор не понимаю, как работает поток управления при использовании 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))
, это приводит к бесконечному циклу с шаблоном, подобным следующему:
![enter image description here](https://i.stack.imgur.com/owK8A.png)
Кто-нибудь может объяснить причину бесконечного цикла?Примечание: использование Drracket с R5RS