找了一篇日本人写的关于mapc与mapcar的介绍
;; mapcar関数はリストの各々の要素に関数をapplyした結果をリストとして返す。
;; mapcar函数是对列表中各个元素分别调用函数处理,再把结果形成一个列表并返回。
(defun mapcar (fn mlist)
(cond ((null mlist) nil)
(t (cons (funcall fn (car mlist))
(mapcar fn (cdr mlist)) ))))
;; mapcはmapcarとよく似ているが、返り値は引数として渡したもとのリストなので、
;; 関数に何らかの副作用(破壊的なリストの変更やその他出力)がなければ引数として
;; 渡したリストがそのまま返る。
;; map和mapcar虽然相似,由于返回值就是作为参数传递进来的原始列表,
;; 如果函数中没有副作用(破坏性列表更改或其他输出)的话,就把传递进来的列表原样返回。
(defun mapc (fn mlist)
(do ((x mlist (cdr x))) ; リストはコピーしてから使う
((null x) mlist) ; コピーが空になったら元のリストを返す
(funcall fn (car x)) ))
mapc直接返回的是传进来的mlist,fn对元素有副作用的话,mlist也就被破坏了。