リストにはドットペアという種類があります。
要素の順番を気にすることなく、値とペアにした記号を使って呼び出せます。
ドットペア
ドットペアは、リストの一つ一つの値と英数字記号がペアになったものです。
例えば、entget で取得できるDXF図形情報は”ドットペア”です。
では、DXF図形情報がどんなものだったのか見てみましょう
下のコードをコマンドラインに入力して、図形を選択してDXF図形情報を変数Lstに入れてください。
(setq Lst (entget (car (entsel))))
グループコードという整数とセットになった図形のDXF情報が戻ってきます。
これは、円のDXF情報です。
((-1 . <Entity name: 142defd4da0>) (0 . "CIRCLE") (330 . <Entity name: 142df0f4280>) (5 . "5F92") (100 . "AcDbEntity") (67 . 1)
(410 . "Layout1") (8 . "0") (100 . "AcDbCircle") (10 251.604 343.608 0.0) (40 . 27.9836) (210 0.0 0.0 1.0))
. (ドット) で仕切られて、グループコードと情報がペアになっています。
円の場合、グループコード10が中心点の値です。(座標点が要素の場合ドットが省略されています。)
assoc は引数が含まれている要素を戻す関数です。
なので、円の中心値が欲しいというときは、
(assoc 10 Lst)
で、グループコードを含んだ円の中心座標(10 251.604 343.608 0.0)をえることができます。
ドットペア時の関数 cdr の役割
AutoLISP関数 cdr は、引数が通常のリストの場合、先頭の要素を無くした残りの要素が並んだリストが戻り値です。
しかし、今回のドットペアが引数の場合は、記号とペアになっている値だけが戻り値になります。
先ほどのassoc と組み合わせて使うと、
(cdr (assoc 10 Lst))
で、中心点座標リスト(251.604 343.608 0.0)を得ることができます。
まとめ
- ドットペアリストは、英数字記号と各要素がペアになっている。
- 順番を気にすることなく英数字記号で欲しい要素を得ることができる。
- assoc は引数が含まれている要素が戻り値の関数。
- cdr は、ドットペアリストでは記号を取り除いた値だけを戻す。
- (cdr (assoc 記号 ドットペアリスト))で、その記号の要素を得ることができる。
関連記事
ドットペアを作成する方法について。
こちらの記事では関数mapcar でドットペアを作る方法を紹介しています。
ドットペアの活用法について。
Comments