;; this map is NOT tail optmized
(bind-func map:[List{!a}*,[!a,!b,!c,!d]*,List{!b}*,List{!c}*,List{!d}*]*
(lambda (func xs1 xs2 xs3)
(let ((f (lambda (l1 l2 l3)
(if (null? l1)
null
(cons (func (car l1) (car l2) (car l3))
(f (cdr l1) (cdr l2) (cdr l3)))))))
(f xs1 xs2 xs3))))