CS 37
Clab 17: Mutable Lists
Review the material on pp. 252-255.
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-22.html#%_sec_3.3.1
Then do exs 3.12, 3.13, 3.14. Keep your brain working and make sure
you understand what is happening. I'll be around to answer any questions.
When you get to 3.13, remember the stop button just to the right of the
run button
in descheme.
Here is the code in those exercises in case you want to cut and paste.
;; EXERCISE 3.12
(define (append x y)
(if (null? x)
y
(cons (car x) (append (cdr x) y))))
(define (append! x y)
(set-cdr! (last-pair x) y)
x)
(define (last-pair x)
(if (null? (cdr x))
x
(last-pair (cdr x))))
;: (define x (list 'a 'b))
;: (define y (list 'c 'd))
;: (define z (append x y))
;: z
;: (cdr x)
;:
;: (define w (append! x y))
;: w
;: (cdr x)
;; EXERCISE 3.13
(define (make-cycle x)
(set-cdr! (last-pair x) x)
x)
;: (define z (make-cycle (list 'a 'b 'c)))
;; EXERCISE 3.14
(define (mystery x)
(define (loop x y)
(if (null? x)
y
(let ((temp (cdr x)))
(set-cdr! x y)
(loop temp x))))
(loop x '()))
Ask any questions you may have.
If there is time, do exercises 3.16 and 3.17 on page 259.