如果继续捕获剩余的计算,为什么以下的Scheme代码片段不会进入无限循环?
(define cont #f)
(define (funny1)
(print "entered funny")
(call/cc (lambda (k) (set! cont k)))
(print "left funny"))
(funny1)
(print "end")
(cont)
似乎从函数返回并调用'print'和'cont'应该是其余计算的一部分,触发无限循环。相反,它只是打印:“输入有趣”,“左有趣”,“结束”,“左有趣”
以前的代码片段的CPS转换确实按预期进入无限循环:
(define cont #f)
(define (funny2 ret)
(print "entered funny")
(let ((rest (lambda ()
(print "left funny")
(ret))))
(set! cont rest)
(rest)))
(funny2 (lambda ()
(print "end")
(cont))))
我在这里缺少什么?