【发布时间】:2016-01-18 07:06:35
【问题描述】:
这个问题已经在 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 函数?这样它就可以一直调用自己
【问题讨论】:
标签: functional-programming scheme racket continuations