Процедура 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 ?


Комментарии отсутствуют.

Необходима авторизация

Вы должны авторизоваться для создания комментария.

Вход