【发布时间】:2020-08-10 20:40:53
【问题描述】:
我正在阅读Scheme and the Art of Programming这本书,但想不出以下问题的答案:
如果 r 是
(escaper (lambda (continuation) (continuation body))
在(... (call/cc r) ...)中,r什么时候可以改写为
(lambda (continuation) body)
【问题讨论】:
-
escaper不是 Scheme 的一部分。它是由那本书Scheme and the Art of Programming定义的,因此提及它很重要。 "escaper将其参数过程转换为类似定义的“转义”过程(又名“延续”),当被调用时,它的结果将成为整个计算的结果。任何等待结果的任何[该转义过程的调用] 被忽略。”(略作复制编辑) -
(call/cc r)可以出现在该表达式的任何位置。这就是... ...的含义。 -
如果
r是(escaper (lambda (continuation) (continuation body))),(r continuation)的结果仍然是(continuation body),因为continuation也是一个转义过程并且首先被调用。 r 是(escaper (lambda (continuation) (continuation body)))或(lambda (continuation) (continuation body))没有区别。 (对不起我的英语不好) -
你重复我回答的结论。 :) 我在到达它时更加小心。我提供翻译并仔细研究。但是,如果它对你来说那么清楚,你为什么要问? :) 但你问得很好,它给了我一个完成这个练习的机会。 :) 干杯!
-
很高兴能提供帮助。 :) (注意使用
let重写。当我进行此类重写时,它通常可以帮助我理解代码,例如with y-combinator)
标签: scheme racket continuations callcc