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)