Practice problems for Test 2

Before you take a look at the solutions, it is strongly recommended that you try to solve the problems on your own.

1. The procedure type-check from problem 9.15 can be written as follows:

(define (type-check f pred?)
  (lambda (x)
    (if (pred? x) (f x) #f)))

Write the procedure safe-bf in terms of type-check. Make sure that safe-bf works for both sentences and words. It may be helpful to recall that safe-sqrt was defined as follows:

(define safe-sqrt (type-check sqrt number?))

2. Write the predicate num-vowels? that takes a sentence as its input and returns the number of vowels in the sentence.

> (num-vowels? '(i am cheese))
5

Write num-vowels?.

3. Predict what this will evaluate to, then try it in the interpreter to see if you got it right.

(accumulate (lambda (c1 c2) (word 'a c1 c2)) '(br c d br "" ""))