Язык программирования Scheme говорит
Оказывается, любую программу, использующую call/cc, можно переписать на CPS без call/cc, но может потребоваться полная переработка программы (иногда включая даже системные примитивы).
Каковы общие приемы
преобразовать программу, использующую
call/cc
, в программу, использующую функции, написанные на CPSпреобразовать в обратном направлении?
(call/cc (lambda (k) ...))
==›(call/cc& (lambda (k) ...) k)
==((lambda (k) ...) k)
. то есть(define (call/cc& lam k) (lam k))
- это определение. это простая история; Я думаю, что было несколько недавних сообщений о реализации call/cc в CPS, в схеме, попробуйте поискать их. - person Will Ness   schedule 10.08.2019(call/cc (lambda (k) ...))
==›(call/cc& (lambda (k c) ...) c)
==((lambda (k c) ...) c c)
. то есть(define (call/cc& lam c) (lam c c))
(по схеме, где продолжение всегда передается последним аргументом (что, конечно, произвольный выбор)). - person Will Ness   schedule 12.08.2019