【问题标题】:Type of a continuation in Racket and determining current continuation球拍中延续的类型和确定当前延续
【发布时间】:2015-02-11 06:54:37
【问题描述】:

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

【问题讨论】:

    标签: scheme racket continuations callcc


    【解决方案1】:

    延续是一个过程(从某种意义上说,它是可调用的,并且对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
    

    【讨论】:

      猜你喜欢
      • 2017-07-06
      • 2016-11-27
      • 1970-01-01
      • 2011-08-28
      • 2013-07-01
      • 2012-03-25
      • 2011-05-30
      • 2012-01-22
      • 1970-01-01
      相关资源
      最近更新 更多