1

Racket 中的延续类型是什么?以及如何确定查看 call/cc 调用的当前延续?(例如:假设当前的延续是紧跟在 call/cc 右括号之后的内容是正确的策略吗?)

4

1 回答 1

1

延续是一个过程(从某种意义上说,它是可调用的并返回 true procedure?),尽管它是一个特殊的过程,它不会返回给延续的调用者。

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
于 2014-12-13T04:08:42.197 回答