Patterns: recognition of patterns is an enormously useful skill to develop

(define (mystery1 sent)     ; What does this function do?
  (cond ((empty? sent) sent)  
        (else (se (* 2 (first sent))
                  (mystery1 (bf sent))))))

(define (mystery2 sent)     ; What does this function do?
  (cond ((empty? sent) sent)
        ((odd? (first sent))
         (se (first sent) (mystery2 (bf sent))))
        (else (mystery2 (bf sent)))))

(define (mystery3 sent)     ; What does this function do?
  (cond ((empty? sent) 0)   ; Why is this tested first?
        ((= (count sent) 1) (first sent))  ; Why is this tested at all?
        (else (mystery3 (se (bl (bl sent))
                            (+ (last sent)
                               (last (bl sent))))))))  ; What is happening?

 

PROBLEMS (All to be done using recursion, not existing HOFs)

1. Write a function delete-first that takes a sentence of words and removes the first letter of each word. (You may assume no empty words are in the sentence.)

> (delete-first '(the gate))
(he ate)

 

2. Write a function int-sqrts that takes a sentence of numbers and returns a sentence containing only those numbers that have integer square roots. You may find the integer? predicate useful.

> (int-sqrts '(9 2 3 4 6 5 7 8 1))
(9 4 1)

 

3. Write a function acc-word that does the same thing as accumulate word.

> (acc-word '(now here man))
nowhereman