Как работает этот пример callcc?
(callcc (fun k -> k 7)) + 3
(callcc (fun k -> 7)) + 3
Что каждый из них оценивает и почему?
1 ответ
Я думаю, это домашнее задание. Если это не так, просто скажите, и я скажу вам ответ напрямую.
Путь call/cc
работает, чтобы захватить продолжение в точке, где это называется. Что это означает для этих примеров, когда вы видите call/cc
замените весь вызов черным ящиком и посмотрите, что осталось:
(call/cc (fun k -> k 7)) + 3
=>
************************ + 3
Так + 3
это то, что происходит с результатом call/cc
вызов. Это то, что происходит дальше, это то, что call/cc
пакеты и звонки k
*.
Все, что вам нужно сейчас, это выяснить, что происходит с вами звонить k
со значением 7.
Для второго примера вы не звоните k
совсем. Поскольку вы не делаете ничего особенного с k
не стоит ожидать call/cc
делать что-то особенное.
Примечание: код, который вы даете, выглядит как некий ML. Ни один из известных мне диалектов ML call/cc
так что, если ваш диалект тоже не подходит, попробуйте скачать схему PLT, чтобы поиграть с ней в интерактивном режиме. Синтаксис не так уж сложно подобрать.
* "продолжение" - это немного более хороший способ сказать "что будет дальше", хотя и не намного приятнее.