Trang "Lược đồ nâng cao: Một số bit nghịch ngợm" nêu rõ:
Continuations là một cấu trúc luồng điều khiển mạnh mẽ mà từ đó gần như bất kỳ cấu trúc luồng điều khiển nào khác [...] có thể được bắt nguồn.
Tôi nghĩ rằng Scheme call/cc
, có liên quan (*) với nhà điều hành J của Peter Landin, có thể được sử dụng để thực hiện bất kỳ cấu trúc dòng điều khiển đã biết nào không?
Với "cấu trúc dòng điều khiển", tôi đặc biệt suy nghĩ về mô tả của Wikipedia về chúng, ví dụ như các trường hợp ngoại lệ, coroutines, chủ đề xanh, v.v.
Cụ thể, có bất kỳ ví dụ nào về cấu trúc dòng điều khiển không thể được thực hiện bằng cách sử dụng call/cc
không?
(*) Tôi chưa thể đào bất kỳ bài báo nào thiết lập call/cc
mạnh như toán tử J. Một bài báo của Felleisen (mà tôi chưa đọc và thừa nhận có vấn đề hiểu nó đầy đủ) điều tra điều này, và dường như kết luận rằng mặc dù chúng thuộc các lớp phức tạp khác nhau, nhưng chúng chính thức tương đương nhau.
(Cũng lưu ý rằng tôi đã cập nhật câu hỏi dựa trên các bình luận bên dưới)
Cập nhật
Dựa trên câu trả lời xuất sắc của @Neel bên dưới, tôi đã xem các trang web nhận xét về các phần tiếp theo được phân tách và không bị giới hạn , và thực sự có vẻ như trong khi call/cc
, không bị giới hạn, là không đủ. Trong khi đó, dường như, các phần tiếp theo được phân tách (như shift/reset
) có thể được sử dụng để thể hiện bất kỳ cấu trúc dòng điều khiển nào.
call/cc
không bị giới hạn như được cung cấp bởi không thể thể hiện các ngoại lệ trong trường hợp không có nhà nước . (Như Thielecke tiếp tục chỉ ra, các trường hợp ngoại lệ có thể được thực hiện bằng cách chuyển qua hai phần tiếp theo, một cho chương trình và phần còn lại cho trình xử lý ngoại lệ, nhưng điều đó đòi hỏi nhiều hơn chỉ call/cc
.)
amb
, và như vậy.