2014-12-12 10 views
1

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

ответ

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 

 Смежные вопросы

  • Нет связанных вопросов^_^