繁体   English   中英

(通话/抄送):延续到底是什么?

[英](call/cc): What exactly is continuation?

在SO上已经问过几次这个问题,但是没有一个解决我的问题。 什么是延续?

考虑以下代码:

( (lambda (pair)
     (begin (print (car pair))
            ((cdr pair) (cons (+ 1 (car pair)) 
                              (cdr pair)))))

  (call/cc (lambda (k) 
             (cons 0 k))))

该程序无限循环打印从0开始的整数序列。

我的理解是:

步骤1: (call/cc (lambda (k) (cons 0 k)))被求值,返回对(0 . #continuation) (这里的#continuation

步骤2:将步骤1中的配对应用于lambda函数。 lambda函数首先打印出car ,即0。

现在,我完全迷路了 程序正在评估(#continuation (1 . #continuation)) ,这对我来说真的没有意义。 #continuation现在是程序吗?

是什么让程序继续将(call/cc (lambda (k) (cons 0 k)))应用于lambda函数? 这样它就可以继续自称

我想我已经知道了。

继续是程序的当前状态

鉴于此,我们首先要问:程序的延续是什么,还是当前状态是什么?

它是一个等待对的lambda函数。

#continuation = ( lambda-function <placeholder>)

<placeholder>将成为我们将传递给该lambda函数的函数,但我们尚未这样做。

现在我们的程序开始运行,它评估lambda函数,然后通过call / cc评估对返回,即(0 . #continuation)

(print (car pair)) =>接下来,lambda函数打印出0

((cdr pair) (cons (+ 1 (car pair)) (cdr pair))))) =>这里, (cdr pair)是我们的continuation ,即(lambda-function <placeholder>) ,然后我们的程序通过一对新的。 然后程序开始其无限循环

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM