Каков тип продолжения в Racket? И как определить текущее продолжение просмотра вызова/cc? (например: правильна ли стратегия предположить, что текущее продолжение - это то, что следует сразу после замыкающей скобки call/cc?)Тип продолжения в Ракетке и определение текущего продолжения
1
A
ответ
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