Процедура Mystery
Следующая процедура, хотя и сложна для понимания, вполне может оказаться полезной:
(define (mystery x)
(define (loop x y)
(if (null? x)
y
(let ((temp (cdr x)))
(set-cdr! x y)
(loop temp x))))
(loop x '()))
Loop пользуется «временной» переменной temp , чтобы сохранить старое значение cdr пары x , поскольку set-cdr! на следующей строке разрушает это значение cdr . Объясните, что за задачу выполняет mystery . Предположим, что переменная v определена выражением (define v (list 'a 'b 'c 'd)) . Нарисуйте диаграмму, которая изображает список, являющийся значением v . Допустим, что теперь мы выполняем (define w (mystery v)) . Нарисуйте стрелочные диаграммы, которые показывают структуры v и w после вычисления этого выражения. Что будет напечатано в качестве значений v и w ?
Комментарии отсутствуют.