Scheme 编码一个不做任何事情的延续
也许我的问题有一个非常简单的答案,但我找不到 在方案R6RS中,如何构建一个不做任何事情并且需要任何参数的延续 我的目标是有一个延续,让我们把它命名为Scheme 编码一个不做任何事情的延续,scheme,continuations,r6rs,Scheme,Continuations,R6rs,也许我的问题有一个非常简单的答案,但我找不到 在方案R6RS中,如何构建一个不做任何事情并且需要任何参数的延续 我的目标是有一个延续,让我们把它命名为QUIT,这样如果我有以下代码: ((lambda () (display 1) (display 2) (QUIT) (displey "A"))) 它包含1和2,但不包含“A”+ 你能帮我吗 谢谢。最简单的方法是使用简单的“返回”样式继续: (call/cc (lambda (return) (display 1)
QUIT
,这样如果我有以下代码:
((lambda ()
(display 1)
(display 2)
(QUIT)
(displey "A")))
它包含1和2,但不包含“A”+
你能帮我吗
谢谢。最简单的方法是使用简单的“返回”样式继续:
(call/cc (lambda (return)
(display 1)
...
(return)
(display "A")))
那有帮助吗?是的,谢谢。我对可以重用的返回函数的定义感兴趣;所以,从你的回答中我得到了启发:
(定义quit#f)
,然后(call/cc(lambda(k)(set!quit k))
@Justin发生了什么事,call/cc会备份上下文,在lambda中调用(return)会使程序继续跳转到调用call/cc后的指令,对吗?@dader-是的,这是延续最简单、最直接的用法之一。事实上,它可以被称为“escape continuation”,因为它将控制恢复到封闭的作用域。我是否可以假设continuation将更好地用于回溯递归下降解析器,而不是触发回溯的异常?@dader-Continuations是实现控制流的一种通用方法,很像GOTO,因此在这两种情况下都很有用。例如,考虑在方案中,继续是唯一的方式(或者至少是最简单的方法)实现<代码>返回< /代码>。