Strona „Advanced Scheme: Some Naughty Bits” stanowi:
Kontynuacje są potężnym konstruktem sterowania przepływem, z którego można wyprowadzić prawie każdą inną strukturę przepływu sterowania [...].
Myślałem, że Scheme call/cc
, związane (*) z operatorem J Petera Landina, może być wykorzystane do wdrożenia dowolnej znanej struktury przepływu sterowania?
W „strukturze kontroli przepływu” szczególnie myślę o ich opisie w Wikipedii , np. Wyjątki, coroutines, zielone wątki i tak dalej.
W szczególności, czy istnieją jakieś przykłady struktur przepływu sterowania, których nie można zaimplementować call/cc
?
(*) Nie byłem w stanie wykopać żadnego papieru, który wykazałby, że call/cc
jest tak potężny jak operator J. Artykuł Felleisen (którego nie przeczytałem i co prawda mam problemy ze zrozumieniem go w pełni) bada to i wydaje się, że dochodzi do wniosku, że mimo iż należą one do różnych klas złożoności, są formalnie równoważne.
(Pamiętaj również, że zaktualizowałem pytanie w oparciu o poniższe komentarze)
Aktualizacja
Opierając się na doskonałej odpowiedzi @Neel poniżej, przyjrzałem się stronom komentującym ograniczone i nieodelimowane kontynuacje , i rzeczywiście wydaje się, że chociaż call/cc
brak ograniczenia, nie jest wystarczający. Tymczasem, jak się wydaje, można wykorzystać pierwszorzędne, ograniczone (kontynuowane shift/reset
) kontynuacje ( wyrażenia) do wyrażenia dowolnej struktury przepływu sterowania.
call/cc
nie mogą wyrażać wyjątków przy braku stanu . (Jak zauważa Thielecke, wyjątki można wdrożyć, przekazując dwie kontynuacje, jedną dla programu, a drugą dla procedury obsługi wyjątków, ale to wymaga więcej niż tylko call/cc
.)
amb
operator i tak dalej.