Mystery procedure
The following procedure is quite useful, although obscure:
(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
uses the "temporary" variable
temp
to hold the old value of the
cdr
of
x
, since the
set-cdr!
on the next line destroys the
cdr
. Explain what
mystery
does in general. Suppose
v
is defined by
(define v (list 'a 'b 'c 'd))
. Draw the box-and-pointer diagram that represents the list to which
v
is bound. Suppose that we now evaluate
(define w (mystery v))
. Draw box-and-pointer diagrams that show the structures
v
and
w
after evaluating this expression. What would be printed as the values of
v
and
w
?