CS3 Midterm Review Answers
More complicated recursion
1.
(define
(uncompress sent)
(if (empty? sent)
sent
(se
(copies (first sent) (second sent))
(uncompress
(bf (bf sent))))))
(define (copies num wd)
(if (= num 0)
'()
(se wd (copies (- num 1) wd))))
2.
(define
(longest-decreasing sent)
(if (empty? sent)
0
(max
(decreasing-seq sent)
(longest-decreasing (bf sent)))))
(define (decreasing-seq sent)
(cond ((empty? (bf sent)) 1)
((<= (first sent) (second sent)) 1)
(else (+ 1 (decreasing-seq (bf sent))))))
3. (define (subsets sent)
(enumerate "" sent))
(define (enumerate sofar sent)
(if (empty? sent)
sofar
(se
(enumerate sofar (bf sent))
(enumerate
(word sofar (first sent)) (bf sent)))))
4. (define (snack c d)
(cond ((= c 0) 1)
((= d 0) 1)
(else (+ (snack (- c 1) d)
(snack c (- d 1))))))
Higher-Order-Functions
5. (define (add-digit num sent)
(every (lambda (wd) (word wd
num))
sent)
6. (define (mode sent)
(accumulate
(lambda (a b)
(if (>
(appearances a sent) (appearances b sent))
a
b))
sent))
7. (define (age student)
(keep number? Student))
(define (all-ages students)
(every age students))
8. (define (name student)
(accumulate
(lambda (a b)
(if
(equal? a ',)
""
(word a b)))
student))
(define (oldest students)
(name (accumulate
(lambda (a
b)
(if (> (age a) (age b))
a
b))
students)))
9. (define (downup wd)
(accumulate (lambda (letter sent)
(se (word (first
sent) letter)
sent
(word (first sent) letter)))
(reverse wd)))
Lambda
10.
This returns a procedure. Specifically,
(lambda (a b)
(+ a (* b 10) 5 8))
11.
(((lambda
(x y)
(lambda (a b)
(+ a
((lambda (g h)(* g
h)) b 10)
x y)))
5 8)
10 7)
This return 93.
12. (define (categorize names)
(every
(lambda (letter)
(keep
(lambda (wd) (equal? (first wd) letter))
names))
'ABCDEFGHIJKLMNOPQRSTUVWXYZ))