Scheme

● continuation

continuation本质是“某个表达式执行完成,下一步要做的事情”。

例如下面的这个lambda表达式:

(let ()
  (newline)
    (call/cc
      (lambda (k)
        (* 4 (k 5))))
  (display "continuation"))

执行完了lambda表达式,下面要做的事情就是输出“continuation”,所以lambda表达式的continuation,就是输出“continuation”等一序列操作。

这里用call/cc来捕捉当前的continuation。“当前”是指call/cc的参数,即这个lambda表达式,执行完后的这个时刻。所以continuation就是指,执行完了lambda表达式的后续操作。

程序每时每刻都有一个continuation,因为每计算完一个表达式就会产生一个问题:下一步做什么?

“下一步做什么?”就是刚才计算完的那个表达式的continuation。

 

 这个lambda表达式的continuation,就是,执行 第一行,+ 2这个操作。它还需要一个参数。

因为continuation是一个过程,第四行,把参数4传递给这个continuation,意味着把4传递给下一步操作,而下一步操作正好缺一个参数,这样就可以执行下一步操作了。

 参考:

https://blog.csdn.net/nklofy/article/details/45221445

http://blog.sina.com.cn/s/blog_4dff871201018wtz.html

http://deathking.github.io/yast-cn/contents/chapter16.html

● 有点像面向对象的写法^-^

● 闭包?

(define counter
  (let ([next 0])
    (lambda ()
      (set! next (+ next 1))
      next)))

(counter)

(counter)

 

(define make-counter
  (lambda ()
    (let ([count 0])
      (lambda ()
        (set! count (+ count 1))
        count))))

(define counter (make-counter))
(counter)
(counter)
(counter)

posted @ 2019-09-20 22:37  volcanorao  阅读(1260)  评论(0编辑  收藏  举报