Я изучаю call/cc
в Racket вдоль линий бумаги Продолжение на примере: исключения, поиск с перемещением во времени, генераторы, потоки и сопрограммы 1.
В документе упоминается, что наиболее выгодный API получен из call/cc
путем предоставления процедуры lambda (cc) (cc cc)
. Я понимаю, что этот конкретный вызов call/cc
возвращает основной программе текущий объект первого класса продолжения.
В следующем примере статья называет все это (right-now)
.
Что я вижу, так это то, что внутри того же примера объект cc
, возвращаемый вышеупомянутым вызовом call/cc
, всегда запускается впоследствии, применяя его к себе. Вот чего я не понимаю.
Я не вижу, что такого особенного в cc
как значение, поэтому я попытался запустить его как функцию с (cc ())
, или (cc (lambda () ()))
, или даже (cc "whatever")
и (cc)
. Никакой радости: видимо, продолжение хочет только это приложение, чтобы начать работать.
Почему это? Какой пример ясно иллюстрирует уникальность запуска cc путем выполнения (cc cc)
?
()
является ошибкой в Racket. Попробуйте что-нибудь вроде(cc 42)
. - person soegaard   schedule 27.10.2015