>>160 問1のヒント
(define (identity obj) obj)

(define (for-each-list f g n lst) ; not末尾再帰版
(if (null? lst) n
(g (f (car lst)) (for-each-list f g n (cdr lst)))))

(define (my-copy-list lst)
(for-each-list identity cons '() lst))

(define (my-map-1 f lst)
(for-each-list f cons '() lst))

(define (my-map-n lsts)
...)

(define (my-map f lst1 . lsts)
(if (null? lsts) (my-map-1 f lst1)
(my-map-n f (cons lst1 lsts)))

この for-each-list を使って、reverse, append, length も書ける。