You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
23 lines
756 B
23 lines
756 B
|
|
Exercise 3.14: 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?
|
|
|