美文网首页
10.3continuation

10.3continuation

作者: jarod_chan | 来源:发表于2016-03-05 16:40 被阅读44次

continuation是一个个表达式执行上下文封装的值。call-with-composable-continuation函数捕获当前的continuation运行到最近的闭合prompt。

  (+ 1 (+1 (+ 1 0)))

在0被执行的点,表达式上下文是三个内嵌的表达式。我们能改变0来获得continuation在返回0之前。

  >(define saved-k #f)
  >(define (save-it!)
      (call-with-composable-continuation
        (lambda (k);k 就是捕获的continuation
          (set! saved-k k)
          0)))

continuation被save-k保存,它封装了程序(+ 1 (+ 1(+ 1 ?)))。?代表了结果被插入值的地方,因为那是save-it!被调用的表达式上下文。continuation被封装像表达式(lambda (v) (+ 1 (+ 1 (+ 1 v))))
被call-with-composable-continuation捕获的continuation是动态的,而不是语法层面的。

  >(define (sum n)
        (if (zero? n)
            (save-it!)
            (+ n  (sum (sub1 n)))))
  >(sum 5)
  15

saved-k变成了(lambda (x) (+ 5 (+ 4 (+ 3 (+ 2 (+ 1 x)))))
更加传统的continuation操作是call-with-current-continuation,经常缩写成call/cc。它和call-with-composable-continuation一样,但是她在恢复保存的continuation之前应用continuation到第一个aborts。

相关文章

  • 10.3continuation

    continuation是一个个表达式执行上下文封装的值。call-with-composable-continu...

网友评论

      本文标题:10.3continuation

      本文链接:https://www.haomeiwen.com/subject/frtakttx.html