这个问题已经被问过好几次了,但没有一个能解决我的问题。 什么是延续?
考虑以下代码:
( (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 函数?这样它就可以不断地调用自己
最佳答案
我想我已经明白了。
Continuation 是程序的当前状态
鉴于此,首先我们需要问:该程序的延续或当前状态是什么?
这是一个等待配对的 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>)
,然后我们的程序将一个新的对传递给它。然后程序开始无限循环
关于functional-programming - (调用/抄送): What exactly is continuation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33222821/