История изменений
Исправление korvin_, (текущая версия) :
Здесь, вместо того, чтобы возвратить управление в место вызова — один из рекурсивных вызовов for-each, управление возвращается в место вызова call/cc. Стек вызовов for-each, не схлопывается, а просто сбрасывается, насколько я понимаю.
Нет, здесь вместо возврата «процедуры-предыдущего шага рекурсии» возвращается «процедура-следующая после вызова call/cc» и она и выполняется. Если тебе это поможет: все вызовы процедур в Схеме являются хвостовыми и неявно передают продолжение. call/cc просто позволяет сделать это явно со связыванием продолжения с некоторым символом.
(define search (lambda (wanted? lst)
И перестань писать как наркоман, пиши как нормальный человек.
(define (search wanted? lst)
Исходная версия korvin_, :
Здесь, вместо того, чтобы возвратить управление в место вызова — один из рекурсивных вызовов for-each, управление возвращается в место вызова call/cc. Стек вызовов for-each, не схлопывается, а просто сбрасывается, насколько я понимаю.
Нет, здесь вместо возврата «процедуры-предыдущего шага рекурсии» возвращается «процедура-следующая после вызова call/cc» и она и выполняется. Если тебе это поможет: все вызовы процедур в Схеме являются хвостовыми и неявно передают продолжение. call/cc просто позволяет сделать это явно с сохранением продолжения в переменную.
(define search (lambda (wanted? lst)
И перестань писать как наркоман, пиши как нормальный человек.
(define (search wanted? lst)