kobapan@wiLiki
Login
Emacs

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
:
:

Debian
Emacs
Firefox
Gauche
JavaScript
Linux
Scheme
org-mode/latex

More ...