基本的な答え
(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 を用いて順序を直すほうが簡単である。