在Racket中继续的类型并确定当前的延续

时间:2014-12-12 14:26:23

标签: scheme racket continuations callcc

Racket中延续的类型是什么?以及如何确定调用/ cc调用的当前延续? (例如:假设当前延续是紧接在看涨/ cc收盘后的当前延续是否是正确的策略?)

1 个答案:

答案 0 :(得分:1)

延续是一个过程(在某种意义上它可以调用并且对procedure?返回true),虽然是一个不会返回到延续调用者的特殊过程。

您调用continuation的值将成为创建它的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