ドットペアリストの作成方法です。
複数のコマンドで共有する情報をまとめてデータベースとして使うと便利です。
予備知識
ドットペアとは
関数 cons
AutoLISP 関数 cons は、リストの最初に要素を加える関数です。さらに、ドットペアを作成する機能もあります。
ドットペアを作るには、アポストロフィ ’ を加えた記号と、ペアにしたい値を引数にします。
例えば、記号Aと数値の2をセットにしたい時、
(cons ‘ A 2)
で、ドットペア (A . 2) を作ることができます。
アポストロフィは関数 quote の略です。
(cons ‘ A 2) は、(cons (quote A) 2) のことです。
ドットペアリスト
各要素が記号と値がペアになっているリストだと、順番を気にせずに記号だけで欲しい要素を取り出すことができるので、通常のリストよりも簡単にデータベースとして使えます。
では、実際にコマンドラインに入力しながらドットペアを作成して試してみましょう。
ドットペアリスト作成
5つのドットペアを1つのリストにして、変数DotLstに入れます。
(setq DotLst (list (cons 'A 1)(cons 'B 2)(cons 'C 3)(cons 'D 4)(cons 'E 5)))
!DotLst で中身を確認してみると、
((A . 1) (B . 2) (C . 3) (D . 4) (E . 5))
ドットペアリストが各要素になったリストができました。
ドットペアリストから欲しい要素を取り出す。
関数 assoc
AutoLISP 関数 assoc を使うと、ドットペアの記号から要素を取り出すことができます。
記号Cの要素を取り出してみましょう。
引数は記号とリストで、(assoc 記号 リスト)の順番で書きます。
このコードで
(assoc 'C dotlst)
このようにCの要素が戻り値になります。
(C . 3)
関数 cdr
関数cdr は、普通のリストでは一番最初の要素を取り除いた残りのリストが戻り値になりますが、ドットペアの場合は、記号とペアになっている値のみが戻り値になります。
通常、記号の部分は必要ないので、ドットペアにストから要素を取り出すときは、以下のようにcdr とassocを一緒に使うことが多いです。
このコードで
(cdr (assoc 'C dotlst))
記号Cとペアになっていた3が戻り値になります。
3
まとめ
- cons でドットペアを作ることができる。
- assoc を使うとドットペアが要素になっているリストから、記号でその要素を得ることができる。
- cdr はドットペアに使うと値だけが戻り値になる。
Comments