(1) Why not use an example like
(cons 100 (cons 55 (cons 123 empty)))My mistake: I broke the rule of using an example from a boundary.
(2) Why not roll all cond-clauses into one:
(define (elim alon)
(cond
((empty? alon) empty)
(else (cond
((> (first alon) 100) (elim (rest alon)))
(else (cons (first alon) (elim (rest alon))))))))
|
(define (elim alon)
(cond
((empty? alon) empty)
((> (first alon) 100) (elim (rest alon)))
(else (cons (first alon) (elim (rest alon))))))
|
Adam * Eve *
|_________|
|
Mary Louis *
|_____|
|
Ben
How can we represent this in Scheme? Here is one idea.
A family tree is either a
- name
- (cons F (cons name (cons M empty)))
where F is family-tree and M is family-tree.
We see a fixed-length list. What should we do? Define constructors and
selectors!
(define-struct child (father name mother))
A family-tree is either a
- name
- (make-child F name M)
where F is family-tree and M is family-tree.
Let's translate the example:
(make-family (make-family 'Adam 'Mary 'Eve) 'Ben 'Louis)How many family members? 5.
Let's move on.
(define-struct child (father name mother))
A family-tree is either a
- #f
- (make-child F name M)
where F is family-tree and M is family-tree.
Now let's prune Louis's tree from ours. Who would want to be a descendant of Louis XIV anyway?
Would that have been as easy as that in the previous version?
Choice of data definition matters!
| Matthias Felleisen | This page was generated on Fri Apr 9 09:17:38 CDT 1999. |