(define (map. fn first . lists) (if (null? lists) (map1 fn first) (map2+ fn (cons first lists)))) (define (map1 fn xs) (cond ((null? xs) '()) (else (cons (fn (car xs)) (map1 fn (cdr xs)))))) (define (map2+ fn lists) (cond ((member '() lists) '()) (else (cons (apply fn (map1 car lists)) (map2+ fn (map1 cdr lists)))))) (print (map. abs '(-1 2 -3 4))) (print (map. cons '(a b) '(1 2))) (print (map. * '(2 3) '(4 5) '(6 7)))