Процедура 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
?
Комментарии отсутствуют.