【发布时间】:2018-03-11 22:43:16
【问题描述】:
我遇到了一些我无法理解的东西。
#lang scheme
(define cc #f)
(define (val!)
(call/cc
(lambda (k)
(set! cc k)
0)))
(* 10 (val!))
(cc 100)
到目前为止一切顺利; (* 10 []) 的延续存储在 cc 中,如果我们调用 (cc 100),我们会在 REPL 中看到 1000,正如预期的那样。
但我尝试的下一件事是定义一个变量作为运行延续的结果:
(define x (cc 20))
我在 REPL 中看到了200,但没有定义x。
存储在cc 中的延续是否包括其返回,因此对define 的调用永远不会返回,而是评估是(* 10 val) 的结果?怎么回事?
【问题讨论】:
-
如果您希望延续返回值,您应该使用可组合延续,方法是设置提示并使用
call-with-composable-continuation。
标签: scheme racket continuations delimited-continuations