为什么Scheme延续不超出功能边界?

时间:2016-02-23 19:04:27

标签: scheme continuations

如果继续捕获剩余的计算,为什么以下的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))))

我在这里缺少什么?

0 个答案:

没有答案