練習2の答え

基本的な答え
(define collect
  (lambda (func lst)
    (if (null? lst)
        ()
        (cons (func (car lst)) (collect func (cdr lst))))))

末尾再帰にこだわりたい人(わかる人)のための答え
(define collect
  (lambda (func lst)
    (define collect00
      (lambda (lst1 lst2)
        (if (null? lst1)
            lst2
            (collect00 (cdr lst1) (cons (func (car lst1) lst2))))))
    (reverse (collect00 lst ()))))

末尾再帰を用いた append は単純にはいかない。reverse を用いて順序を直すほうが簡単である。