【发布时间】:2015-02-11 06:54:37
【问题描述】:
Racket 中延续的类型是什么?以及如何确定查看 call/cc 调用的当前延续? (例如:假设当前的延续是紧跟在 call/cc 右括号之后的内容是正确的策略吗?)
【问题讨论】:
标签: scheme racket continuations callcc
Racket 中延续的类型是什么?以及如何确定查看 call/cc 调用的当前延续? (例如:假设当前的延续是紧跟在 call/cc 右括号之后的内容是正确的策略吗?)
【问题讨论】:
标签: scheme racket continuations callcc
延续是一个过程(从某种意义上说,它是可调用的,并且对procedure? 返回 true),尽管它是一个特殊的过程,不会返回给延续的调用者。
您用来调用延续的值将成为创建它的call/cc 调用的返回值。
例子:
> (define $k #f)
> (call-with-values (lambda () (call/cc (lambda (k)
(set! $k k))))
(case-lambda (() "Zero values")
((x) "One value")
((x y) "Two values")
((x y z) "Three values")))
"One value"
> (procedure? $k)
#t
> ($k)
"Zero values"
> ($k 1)
"One value"
> ($k 1 2)
"Two values"
> ($k 1 2 3)
"Three values"
> ($k 1 2 3 4)
#<case-lambda-procedure>: arity mismatch;
the expected number of arguments does not match the given number
【讨论】: