Lab 04 Su11 CS61A

CS61A Summer 2011 Lab 4

1. Try these in Scheme:

(define x (cons 4 5) )

(car x)

(cdr x)

(define y (cons ’hello ’goodbye) )

(define z (cons x y) )

(car (cdr z) ) (cdr (cdr z) )

2. Predict the result of each of these before you try it:

(cdr (car z) )

(car (cons 8 3) )

(car z)

(car 3)

3. Enter these definitions into Scheme:

(define (make-rational num den)

(cons num den) )

(define (numerator rat)

(car rat) )

(define (denominator rat)

(cdr rat) )

(define (*rat a b)

(make-rational (* (numerator a) (numerator b) )

(* (denominator a) (denominator b) ) ) )

(define (print-rat rat)

(word (numerator rat) ’/ (denominator rat) ) )

4. Try this:

(print-rat (make-rational 2 3) )

(print-rat (*rat (make-rational 2 3) (make-rational 1 4) ) )

5. Define a procedure +rat to add two rational numbers, in the same style as *rat above.

6. Now do exercises 2.2, 2.3, and 2.4 from SICP.

7. This week you’ll learn that sentences are a special case of lists, which are built out of pairs. Explore how that’s done with experiments such as these:

(define x ’(a (b c) d) )

(car x)

(cdr x)

(car (cdr x) )

Continued on next page...

Lab 4 continued...

8. SICP ex. 2.18; this should take some thought, and you should make sure you get it right, but don’t get stuck on it for the whole hour. Note: Your solution should reverse lists, not sentences! That is, you should be using cons, car, and cdr, not first, sentence, etc.