Scheme 编码一个不做任何事情的延续

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)

也许我的问题有一个非常简单的答案,但我找不到

在方案R6RS中,如何构建一个不做任何事情并且需要任何参数的延续

我的目标是有一个延续,让我们把它命名为
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,因此在这两种情况下都很有用。例如,考虑在方案中,继续是唯一的方式(或者至少是最简单的方法)实现<代码>返回< /代码>。