; examples of varieties of mapcar ; map a function of 1 parameter across a list (defun mapcar1 (F L) (cond ((null L) nil) (t (cons (funcall F (car L)) (mapcar1 F (cdr L)))) ) ) ; add1 is for testing (defun add1 (N) (+ 1 N)) ; test mapcar1 with add1 (mapcar1 'add1 '(1 2 4 2)) ; map a function of 2 parameters across 2 lists (defun mapcar2 (F L1 L2) (cond ((null L1) nil) (t (cons (funcall F (car L1) (car L2)) (mapcar2 F (cdr L1) (cdr L2)))) ) ) ; add2 is for testing (defun add2 (N1 N2) (+ N1 N2)) ; test mapcar2 with add2 (mapcar2 'add2 '(1 2 4 2) '(7 7 7 8)) ; map a function of 2 parameters across a list of pairs (defun mapcar3 (F L) (cond ((null L) nil) (t (cons (funcall F (caar L) (cadar L)) (mapcar3 F (cdr L)))) ) ) ; test mapcar3 with add2 (mapcar3 'add2 '((1 7) (2 7) (4 7) (2 8))) ; map a function of 2 parameters across a list of pairs ; using mapcar1 instead of direct recursion (defun mapcar4 (F L) (mapcar1 (function (lambda (A) (funcall F (car A) (cadr A)))) L) ) ; test mapcar4 with add2 (mapcar4 'add2 '((1 7) (2 7) (4 7) (2 8)))