Полагаю, это домашнее задание. Если это не так, просто скажите, и я скажу вам ответ напрямую.
Способ 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 Scheme , чтобы поиграть с ним в интерактивном режиме. Синтаксис не слишком сложен для понимания.
* «продолжение» - немного более приятный способ сказать «что будет дальше», хотя и не намного приятнее.