Я пытаюсь это сделать на Racket, и он дает ответ как 5. Но я не могу понять, как это дошло до ответа.Как это выражение call/cc работает?
((call/cc call/cc) (lambda (x) 5))
Я расширил его следующим образом.
((call/cc (lambda (k) (call/cc (lambda (k1) (k k1))))) (lambda (x) 5))
Если предположить, что расширение является правильным, я до сих пор не понимаю, что происходит, когда к продолжению применяется к k1 продолжению и как он это делает для выполнения внешней лямбды с получением 5.
Просто, чтобы подтвердить свое понимание объяснения. (k k1) возвращается с k1. Тогда (k1 (lambda (x) 5)). Что возвращается с (лямбда (x) 5). Тогда ((лямбда (x) 5) (лямбда (x) 5)) происходит уступкой 5. Правильно ли я понял? –
Да, это звучит разумно. –
Awesome. Итак, в этом случае как k, так и k1 продолжения почти одинаковы? –