CS 115, Fall 2002
Homework Assignment 6
Due: 11 November 2002
-
Hand Evaluation
Using hand-evaluation, determine the meaning of these
expressions. Show your steps.
For each step, copy and paste all of the definitions,
changing any that are set!d, to show
how they change.
(define f 1)
(begin
(set! f (+ f 1))
f)
(begin
(set! f (+ f 1))
f)
Solution
(define f 2)
(begin
f)
(begin
(set! f (+ f 1))
f)
(define f 2)
2
(begin
(set! f (+ f 1))
f)
(define f 3)
2
(begin
f)
(define f 3)
2
3
(define (inside)
(let ([f 1])
(begin
(set! f (+ f 1))
f)))
(inside)
(inside)
Solution
(let ([f 1])
(begin
(set! f (+ f 1))
f))
(inside)
(define f^ 1)
(begin
(set! f^ (+ f^ 1))
f^)
(inside)
(define f^ 2)
(begin
f^)
(inside)
(define f^ 2)
2
(inside)
(define f^ 2)
2
(let ([f 1])
(begin
(set! f (+ f 1))
f))
(define f^ 2)
(define f^^ 1)
2
(begin
(set! f^^ (+ f^^ 1))
f^^)
(define f^ 2)
(define f^^ 2)
2
(begin
f^^)
(define f^ 2)
(define f^^ 2)
2
2
-
Add to phone book
A phone-book is either:
where name is a symbol and phone-number is a number.
(define-struct entry (name phone-number))
This is the template for phone-books:
(define (phone-book-template a-pb)
(cond
[(null? a-pb) ...]
[else (entry-name (car a-pb))
(entry-phone-number (car a-pb))
(phone-book-template (cdr a-pb))]))
Write this function:
;; add-to-phone-book : phone-book symbol number phone-book
(define (add-to-phone-book a-pb name number)
...)
Do not forget to design test cases before designing the function.
Solution
(define (add-to-phone-book a-pb name number)
(cond
[(null? a-pb) (cons (make-entry name number) '())]
[else (if (eq? name (entry-name (car a-pb)))
a-pb
(cons (car a-pb)
(add-to-phone-book (cdr a-pb)
name
number)))]))
(add-to-phone-book '() 'me 5551212)
(cons (make-entry 'me 5551212) '())
(add-to-phone-book (cons (make-entry 'me 5551212) '()) 'me 5551212)
(cons (make-entry 'me 5551212) '())
(add-to-phone-book (cons (make-entry 'me 5551212) '()) 'you 5551234)
(cons (make-entry 'me 5551212)
(cons (make-entry 'you 5551234)
'()))
-
Lookup in phone book
Write this function:
;; lookup-in-phone-book : phone-book symbol number or #f
(define (lookup-in-phone-book a-pb name)
...)
Do not forget to design test cases before designing the function.
Solution
(define (lookup-in-phone-book a-pb name)
(cond
[(null? a-pb) #f]
[else (if (eq? name (entry-name (car a-pb)))
(entry-phone-number (car a-pb))
(lookup-in-phone-book (cdr a-pb) name))]))
(lookup-in-phone-book '() 'me)
#f
(lookup-in-phone-book (cons (make-entry 'me 5551212) '()) 'me)
5551212
(lookup-in-phone-book (cons (make-entry 'me 5551212) '()) 'you)
#f
-
Adding State
Add a single definiton for the current phone book,
initially an empty phone book. Then, define the functions
add and lookup:
;; add : number symbol void
(define (add name number) ...)
;; lookup : symbol number or #f
(define (lookup name) ...)
Solution
(define current-phone-book '())
(define (add name number)
(set! current-phone-book (add-to-phone-book current-phone-book name number)))
(define (lookup name)
(lookup-in-phone-book current-phone-book name))
Here are some tests for those functions:
(lookup 'me)
#f
(add 'me 5551212)
(lookup 'me)
5551212
Last modified: Mon, Nov 11, 2002, 5:28 pm
HTML conversion by TeX2page 4p4k3
|