Final exam schedule:
Thursday 12/14 @ 7:15 - 9:30 (CS 145A, 9:30 class)
Monday 12/18 @ 9:45 - 12:00 (CS 145A, 10:30 class)
Final exam review will be held in class on Monday, December 11 (our
last meeting)
Tentatively, the final exam will cover the same material covered on the previous two midterms plus:
Section 6.3: the signal processing paradigm
In particular, know how to use map, filter, and accum, and know how
to define similar procedures
using list recursion, iteration, and tail recursion.
Here are some sample questions:
; Data-Driven ADT's
; stateless
(define (make-point xc yc) ...)
(define (make-line point1 points)
(define slope ...)
(define y-intercept ...)
(define (self msg) ...)
self)
; stateful
(define (make-clock h m s)
(define hour h)
(define min m)
(define sec s)
(define (update-time!)
(set! sec (modulo (+ sec 1) 60))
(if (zero? sec) (set! min (modulo (+ min 1) 60)))
(if (zero? min) (set! hour (modulo (+ hour 1) 12))))
(define (self msg)
(cond ((eq? msg 'time?) (list hour min sec))
((eq? msg 'update!) (update-time!) 'done)
(else 'error)))
self)
(define (get-time clock) (clock 'time?))
(define (update-time! clock) (clock 'update!))
;> (iter-update-time! c1 158)
;done
;> (get-time c1)
;(11 2 29)
(define (iter-update-time! clock secs)
(do ((sec 0 (+ sec 1)))
((= sec secs) 'done)
(update-time! clock)))
(define c1 (make-clock 11 59 51))
(define (make-system init update final?)
(define state init)
(define cycle 0)
(define (control-loop)
(if (not (final? state))
(begin
(set! state (update state))
(display state)
(newline)
(control-loop))))
(define (self msg)
(cond ((eq? msg 'state?) state)
((eq? msg 'reinit!) (set! state init) 'done)
((eq? msg 'cycle?) cycle)
((eq? msg 'start!) (control-loop) 'done)
((eq? msg 'update!) (set! state (update state)) 'done)
(else 'error)))
self)
(define (double x) (* 2 x))
(define (big? x) (> x 33))
(define sys1 (make-system 1 double big?))
;> (sys1 'start!)
;2
;4
;8
;16
;32
;64
;done
; box and pointer diagrams
(define (mystery)
(define pairs '((a . 1) (b . 2) (c . 3) (d . 4)))
(set-car! (cddr pairs) (cdddr pairs))
(set-cdr! (cdddr pairs) pairs)
pairs)
(define strange (mystery))
; draw a box-and-pointer diagram of strange
; create the infinite list (0 1 2 3 01 2 3 0 1 2 3 ...)
; streams
; create the stream $(x x x y y y x x x y y y x x x ...)
; tree recursion
(define (leaf? val) (not (list? val)))
(define (append-leaves tree)
(cond ((null? tree) "")
((leaf? tree) (if (string? tree) tree ""))
(else (string-append (append-leaves (car tree))
(append-leaves (cdr tree))))))
(define t1 '((("hat" "bat" rat) "cat") 42 "bob" ("plop")))
;> (append-leaves t1)
;"hatbatcatbobplop"