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