【发布时间】:2018-01-27 11:34:48
【问题描述】:
我想了解如何在没有call/cc 的情况下实现协程。
我从这个小例子开始了解如何修改代码,以便在没有call/cc 的情况下使用它:
(define x 0)
( + 2 (call-with-current-continuation
(lambda (cont)
(set! x cont)
3)))
(x 4)
当我使用call/cc 执行函数时,它给了我5,然后当我执行(x 4) 时,它给了我6。
我用这个函数来替换call/cc:
(define (call/cc-cps f continuation)
(f continuation continuation))
我试着把这个函数改成CPS(continuation-passing style):
(call/cc-cps
(lambda (exit cont)
(set! x cont)
3)
(lambda (value)
(+ value 2)))
但是当我执行它时,我得到的不是 5,而是 3。但我确实得到了 6 和(x 4)。
你能告诉我有什么问题吗? 谢谢你
【问题讨论】:
标签: scheme coroutine continuations continuation-passing callcc