2 days ago

my attempt to do the exercises in sicp.

## Monday, September 7, 2009

### sicp exercise 3.14

; 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 ?

(define (mystery x)

(define (loop x y)

(if (null? x)

y

(let ((temp (cdr x)))

(set-cdr! x y)

(loop temp x))))

(loop x '()))

(define v (list 'a 'b 'c 'd))

(display v) (newline)

(define w (mystery v))

(display v) (newline)

(display w) (newline)

; It reverses the list

Subscribe to:
Post Comments (Atom)

## No comments:

Post a Comment