На сторінці "Розширена схема: деякі неслухняні біти" зазначено:
Продовження - це потужна конструкція керуючого потоку, з якої може бути отримана майже будь-яка інша структура управління потоком [...].
Я думав, що схеми call/cc
, пов'язані (*) з оператором J Петра Ландіна, можуть бути використані для реалізації будь-якої відомої структури потоку управління?
Маючи "структуру потоку управління", я конкретно замислююсь над описом Вікіпедії , наприклад, винятками, коруптиками, зеленими нитками тощо.
Зокрема, чи є приклади структур управління потоком, які неможливо реалізувати за допомогою call/cc
?
(*) Я не зміг викопати жодного паперу, який би встановив call/cc
такий потужний, як оператор J. Дослідження Феллейсена (яку я не читав і, правда кажучи, має проблеми з розумінням цього в повному обсязі), досліджує це, і, здається, робить висновок, що хоча вони знаходяться в різних класах складності, вони формально рівноцінні.
(Також зауважте, що я оновив питання на основі коментарів нижче)
Оновлення
Виходячи з чудової відповіді @Neel нижче, я переглянув сайти, коментуючи обмежене та неохочене продовження , і справді здається, що, хоча call/cc
бути невизначеним, це недостатньо. Тим часом першокласне обмежене продовження (на кшталт shift/reset
) може бути використане, як видається, для вираження будь-якої структури контрольних потоків.
call/cc
не можуть виражати винятки за відсутності держави . (Як зазначає Тієлке, винятки можуть бути реалізовані, пропустивши два продовження, одне для програми, а інше для обробника винятків, але для цього потрібно більше, ніж просто call/cc
.)
amb
оператор тощо.