AutoLISPは、リスト データ タイプを使用してグラフィック座標値を表します。
点は、2 つまたは 3 つの数値の リストとして表されます。
次の例に示すように、list 関数を使用して点リストを作成できます。
(list 3.875 1.23) (3.875 1.23) (list 88.0 14.77 3.14) (88.0 14.77 3.14)
次の式のいずれかを使用して、点変数に特定の座標を代入できます。
(setq pt1 (list 3.875 1.23)) (3.875 1.23) (setq pt2 (list 88.0 14.77 3.14)) (88.0 14.77 3.14) (setq abc 3.45) 3.45 (setq pt3 (list abc 1.23)) (3.45 1.23)
最後の例は、点リストの X 座標に変数 abc の値を使用しています。リストのすべてのメンバーが定数値の場合は、list 関数ではなく、quote 関数を使用してリストを明示的に定義できます。quote 関数は、次に示すように、式を評価せずに返します。
(setq pt1 (quote (4.5 7.5))) (4.5 7.5)
quote 関数の代わりにクォーテーション(')を使用することもできます。次のコードは、前のコードと同じ結果になります。
(setq pt1 '(4.5 7.5)) (4.5 7.5)
クオーテーションおよび (`) 関数を使用して、変数に格納されている値を使用したリストを作成することはできません。次のコードは、期待した結果を返しません。
(setq abc 3.45) 3.45 (setq pt4 (quote abc 1.23)) ; error: syntax error
car、cadr、caddr という 3 つの組み込み関数を使用すると、点リストの X、Y、Z 要素を取得することができます。次のコード例は、3D 点リストから値を取得する方法を示しています。変数 pt に、点 1.5,3.2,2 を代入します。
(setq pt '(1.5 3.2 2.0)) (1.5 3.2 2.0)
car 関数は、リストの最初の要素を返します。次の例では、点リストの X 値が変数 x_val に代入されます。
(setq x_val (car pt)) 1.5
cadr 関数は、リストの 2 番目の要素を返します。次の例では、点リストの Y 値が変数 y_val に代入されます。
(setq y_val (cadr pt)) 3.2
caddr 関数は、リストの 3 番目の要素を返します。次の例では、点リストの Z 値が変数 z_val に代入されます。
(setq z_val (caddr pt)) 2.0
次のコードは、長方形の左下コーナーと右上のコーナー(pt1 と pt2)を定義しています。
(setq pt1 '(1.0 2.0) pt2 '(3.0 4.0)) (3.0 4.0)
次に示すように、car 関数と cadr 関数を使用して、pt1 の X 要素と pt2 の Y 要素を抽出することで、変数 pt3 に長方形の左上コーナーの座標を代入することができます。
(setq pt3 (list (car pt1) (cadr pt2))) (1.0 4.0)
上の文により、pt3 に点(1.0, 4.0)が代入されます。
AutoLISP は、car 関数と cdr 関数の組み合わせを 4 レベルの深さまでサポートします。これらの関数の例として、caaaar や cadrがあります。各 a は car の呼び出しを表し、各 d は cdr の呼び出しを表します。例:
(caar x) is equivalent to (car (car x)) (cdar x) is equivalent to (cdr (car x)) (cadar x) is equivalent to (car (cdr (car x))) (cadr x) is equivalent to (car (cdr x)) (cddr x) is equivalent to (cdr (cdr x)) (caddr x) is equivalent to (car (cdr (cdr x)))