% Function MAPC, MAPCAR, MAPCAN, MAPL, MAPLIST, MAPCON
Function MAPC
, MAPCAR
, MAPCAN
, MAPL
, MAPLIST
, MAPCON
mapc
function &rest lists+ => list-1
mapcar
function &rest lists+ => result-list
mapcan
function &rest lists+ => concatenated-results
mapl
function &rest lists+ => list-1
maplist
function &rest lists+ => result-list
mapcon
function &rest lists+ => concatenated-results
function - listsと同じ数の引数を取る関数指定子
lists - 通常のリスト
list-1 - 最初のlists(通常のリストである必要があります)
result-list - リスト
concatenated-results - リスト
マッピング操作は、
引数の各列からひとつ得たものの集合を、
連続で関数に適用した結果を返却します。
mapc
とmapl
以外は、関数の返却値で構成された結果を返却します。
mapc
とmapl
の場合は、返却値はlistsの列です。
functionは、最初はインデックス0番目の全ての要素で呼び出され、
そのあとインデックス1番目の全ての要素で呼ばれ、
以下同様に実行します。
もしfunctionがシンボルのときは、
それはsymbol-function
が実行されたかのように
関数へcoerce
されます。
mapcar
は、listsの連続した要素に対して操作します。
functionは、各listsの最初の要素で適用し、
そのあと各listsの二番目の要素で適用し、
それを繰り返します。
繰り返しは最短のlistsがなくなったときに終了し、
他のlistsの余分な要素は無視されます。
mapcar
の返却値は、
functionが連続して呼び出された結果のリストです。
mapc
はmapcar
と似ていますが、
適用されたfunctionの結果を蓄積しない所が違っています。
lists引数が返却されます。
maplist
はmapcar
と似ていますが、
functionは、listsのサブリストを連続して適用するところが違っています。
functionは、最初はlistsそのものに適用され、
そのあと各listsのcdr
によって適用され、
さらに各listsのcdr
のcdr
によって適用され、
それをくり返します。
mapl
はmaplist
と似ていますが、
適用されたfunctionの結果を蓄積しない所が違っています。
list-1が返却されます。
mapcan
とmapcon
は、
それぞれmapcar
とmaplist
に似ていますが、
適用したfunctionの結果を、
list
ではなくnconc
によって
リストに結合するところが違っています。
これは次のような関係であり、
(mapcon f x1 ... xn)
== (apply #'nconc (maplist f x1 ... xn))
(mapcar #'car '((1 a) (2 b) (3 c))) => (1 2 3)
(mapcar #'abs '(3 -4 2 -5 -6)) => (3 4 2 5 6)
(mapcar #'cons '(a b c) '(1 2 3)) => ((A . 1) (B . 2) (C . 3))
(maplist #'append '(1 2 3 4) '(1 2) '(1 2 3))
=> ((1 2 3 4 1 2 1 2 3) (2 3 4 2 2 3))
(maplist #'(lambda (x) (cons 'foo x)) '(a b c d))
=> ((FOO A B C D) (FOO B C D) (FOO C D) (FOO D))
(maplist #'(lambda (x) (if (member (car x) (cdr x)) 0 1)) '(a b a c d b c))
=> (0 0 1 0 1 1 1)
;もし入力のリストに対応する要素が
;そのリスト内で最後の要素の場合は1
(setq dummy nil) => NIL
(mapc #'(lambda (&rest x) (setq dummy (append dummy x)))
'(1 2 3 4)
'(a b c d e)
'(x y z)) => (1 2 3 4)
dummy => (1 A X 2 B Y 3 C Z)
(setq dummy nil) => NIL
(mapl #'(lambda (x) (push x dummy)) '(1 2 3 4)) => (1 2 3 4)
dummy => ((4) (3 4) (2 3 4) (1 2 3 4))
(mapcan #'(lambda (x y) (if (null x) nil (list x y)))
'(nil nil nil d e)
'(1 2 3 4 5 6)) => (D 4 E 5)
(mapcan #'(lambda (x) (and (numberp x) (list x)))
'(a 1 b c 3 4 d 5))
=> (1 3 4 5)
この場合は、関数はフィルタの役割を果たします。
これは標準のLispの語句のmapcan
です。
(mapcon #'list '(1 2 3 4)) => ((1 2 3 4) (2 3 4) (3 4) (4))
なし。
listsが通常のリストではないとき、
型type-error
のエラーを通知する準備をしなければなりません。
なし。