LINUX.ORG.RU

История изменений

Исправление 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)