Emacs:mapcarとmapc
mapcar
mapcar関数はリストの各々の要素に関数をapplyした結果をリストとして返す。
仕組み
(defun mapcar (fn mlist) (cond ((null mlist) nil) (t (cons (funcall fn (car mlist)) (mapcar fn (cdr mlist)) ))))
mapc
mapcはmapcarとよく似ているが、返り値は引数として渡したもとのリストなので、関数に何らかの副作用(破壊的なリストの変更やその他出力)がなければ引数として渡したリストがそのまま返る。
仕組み
(defun mapc (fm mlist) (do ((x mlist (cdr x))) ; リストはコピーしてから使う ((null x) mlist) ; コピーが空になったら元のリストを返す (funcall fn (car x)) ))
実行例
(mapc (lambda (in) (princ in) (princ "\n")) load-path) /etc/emacs24 /etc/emacs /usr/local/share/emacs/24.4/site-lisp /usr/local/share/emacs/site-lisp : :