我有这个协程示例
(define p1
(lambda (continuation)
(display "1")
(newline)
(p1 (call/cc continuation))))
(define p2
(lambda (continuation)
(display "2")
(newline)
(p2 (call/cc continuation))))
(p1 p2)
我想在 CPS 中更改它,以便我可以使用 CPS call/cc :
(define (call/cc-cps f continuation)
(define (exit value actual-continuation)
(continuation value))
(f exit continuation))
我知道要在 CPS 中转换一个函数,我需要在函数中添加一个延续,但我很困惑,我真的不知道该怎么做。
我认为它看起来像这样:
(define p1
(lambda (continuation)
(display "2")
(newline)
(call/cc-cps
(lambda (continuation actual-continuation)
continuation) ;; or actual-continuation ?
(lambda (value)
(p1 value)))))
(p1 p2)
但这可能是错误的。有人可以帮我理解如何正确地做到这一点吗?
谢谢