mapcarは、リストになっている複数の値に同じ処理をする関数です。
戻り値もリストです。
予備知識
リストについて。
AutoLISP 関数 mapcar と quote
mapcar は、リスト内の値を引数に関数を実行して、結果をリストのまま戻します。
mapcarに渡す引数は、引用した関数とその関数の引数になる値をまとめたリストです。
quate は、関数や記号を引用するときに使います。
quateはアポストロフィで省略ができるので、(quate 関数)を ‘関数 と書くことができます。
例)数値リストを文字列リストに変換
mapcar を使って、複数の整数を文字列に変更します。
整数を文字列にする関数は、itoa です。
(itoa 1) で、数値の 1 が文字列に変換されて “1” が戻ります。
それでは、itoa を引用関数として、(quote itoa)、itoa に渡したい数値 1 2 3 4 をリスト (list 1 2 3 4) にして、4つの数値を4つの文字列に変換してみましょう。
コマンドラインに入力して、試してみて下さい。
(mapcar (quote itoa) (list 1 2 3 4))
全ての数値が文字列になったリスト
("1" "2" "3" "4")
が戻り値としてコマンドラインに表示されます。
引数が複数ある関数をつかう
複数引数がある関数を引用した場合は、必要な引数分のリストを付けます。
例として、+をつかって、2つの引数を足してみましょう。
関数 + は、引数を合算する機能があります。引数として1 と 10 を渡して、
(+ 1 10)
で、11が戻ります。
それでは、mapcar を使って複数の足し算を一気にしてみましょう。
- 引用関数 +
- 一つ目の引数 (list 1 2 3 4)
- 二つ目の引数 (list 10 20 30 40)
これをmapcar に当てはめると、
(mapcar (quote +) (list 1 2 3 4) (list 10 20 30 40))
これで、各要素が足されて、以下の合算されたリストが戻ります。
(11 22 33 44)
ちなみに省略形は
(mapcar ‘+ ‘(1 2 3 4) ‘(10 20 30 40))
mapcar でドットペアを作る
ドットペアを作るcons を引用関数にしてmapcarを試してみましょう。
アポストロフィで省略できる関数、list とquoteがたくさん並ぶので面白いですよ。
cons に必要な引数は、記号と値です。
(cons ‘A 10) で、ドットペア (A . 10) ができますが、cons で使うアポストロフィも quote の略です。
つまり、(cons ‘A 10) は (cons (quote A) 10) の略です。
それでは、
((A . 10) (B . 20) (C . 30) (D . 40))
こののドットペアが並んだリストを mapcar を使って作成します。
(mapcar (quote cons) (list (quote A) (quote B) (quote C) (quote D)) ;記号のリスト (list 10 20 30 40) ;値のリスト )
この場合、記号側のリストはアポストロフィ1つで、list も各記号につくquoteも省略できます。
(mapcar (quote cons) '(A B C D) (list 10 20 30 40) )
もちろん、cons のquote も、値のリストのlist も省略できるので、
(mapcar 'cons '(A B C D) '(10 20 30 40))
こんなにシンプルになります。
もちろん、どのコードでも結果は同じで
((A . 10) (B . 20) (C . 30) (D . 40))
このドットペアが戻り値になります。
まとめ
- mapcarは、引用関数をリストの値を引数に実行して、結果のリストを戻す。
- quote はアポストロフィで省略できる。
- list はアポストロフィで省略できる。
関連記事
関数cons とドットペアについて。
mapcar の使用サンプル
Comments
autocad lisp関数で リスト内の最小値を得る関数
LIST (34 12 58 9) の最小値である3を得る関数