Как работает этот пример 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, чтобы поиграть с ней в интерактивном режиме. Синтаксис не так уж сложно подобрать.

* "продолжение" - это немного более хороший способ сказать "что будет дальше", хотя и не намного приятнее.

Другие вопросы по тегам