AutoLISPってなに?という方はまずこちらの記事をご覧ください。
AutoCADユーザーがAutoLISPを覚えるべきメリット3選
今回の記事では関数「list」「cons」について解説していきます。
AutoLISPはリストと呼ばれる複数のデータが格納できる箱を使って、処理を行っていくプログラミング言語です。
そのため、リストを作成できるlistとconsは使用頻度が非常に高い関数と言えます。
AutoLISP習得において、まず最初に覚えるべき関数ですのでAutoLISPを身に付けたい方はぜひご覧ください。
その他の最初に覚えるべき関数はこちらの記事でご紹介しています。
【入門】AutoLISP初心者が最初に覚えるべき関数5種!
【AutoLISP】リストを作成する関数「list」「cons」

リストを作成する list
listの動作
リストとはいくつかのデータを左右一組のかっこで囲み、ひとつにまとめたものです。リストに格納される各データは要素またはアトムと呼ばれます。
AutoLISPでは変数の型宣言が必要ないため、リストにはAutoCADのあらゆるデータを格納することが可能です。
リストを作成する
数値の1と2を要素に持つリストを例に説明します。
(list 1 2)
記述自体は非常に単純で、listのあとに要素となるデータを並べて記述するだけです。要素が2つまたは3つの数値の場合、2Dまたは3Dの座標として扱うことも可能です。
また、リスト自体を要素とすることもできて、プログラムの記述は次のようになります。
(list (list 1 2) 3)
シングルクォーテーションで代用できる
関数listは「list」と記述する代わりに、「'」(シングルクォーテーション)で代用することが可能です。
次のリストは異なる記述をしていますが、返り値は同じリストとなります。
(list 1 2)
'(1 2)
「'」はquoteという関数を簡略に表現したもので、与えられた引数を評価せずに返します。このため、上記2つのリストは同じリストを返すことになります。
「評価」とはプログラムを実行することです。
listの書式
listの構文と引数および返り値は次のとおりです。
- 構文 (list [expr...])
- expr:作成するリストの要素。省略可能。
- 返り値 リスト / nil
- 指定した引数を要素に持つリスト。引数がない場合はnilを返す。
ドット対を作成する cons
consの動作
consもlistと同様にリストを作成する関数ですが、作成されるリストはドット対と呼ばれる特殊なリストになります。
ドット対とは
ドット対とは下記のように要素が2つだけで、要素の間にピリオド(ドット)が入った形式で表現されるリストです。
(1 . "A")
cdrでの返り値は通常のリストの場合リストまたはnilですが、ドット対の場合は2番目の要素が直接取得できます。
cdrってなに?という方はこちらの記事で解説していますのでご覧ください。
【AutoLISP】car部とcar部を取得する関数「car」「cdr」
ちなみに、図形定義データの要素もすべてドット対となっています。
図形定義データについてはこちらの記事で解説しています。
図形編集を自動化しよう!AutoLISPの図形名関数を解説
注意点としてドット対は通常のリストとは異なります。そのため、通常のリストを引数とするappendやsubstなどの関数では使用できませんので気を付けてください。
ドット対を作成する
それでは、consの記述について説明します。上記のドット対の例をconsで作成する場合は次のように記述します。
(cons 1 "A")
listと同様に要素を並べて記述するだけです。listのように「'」を使って簡略に表現することはできません。
また、2番目の要素にリストを記述した場合、返り値はドット対ではなく通常のリストとなります。
(cons 1 (list 2 3))
上記の返り値は次のような通常のリストです。
(1 2 3)
consの書式
consの構文と引数および返り値は次のとおりです。
- 構文 (cons new-first-element list-or-atom)
- new-first-element:作成するドット対の1番目の要素。
list-or-atom:作成するドット対の2番目の要素。 - 返り値 ドット対 / リスト
- list-or-atomがリストでない場合はドット対、list-or-atomがリストの場合はリストを返す。
まとめ
今回のまとめ
- リストはAutoCADのあらゆるデータを格納できる
- リストに格納するデータは要素またはアトムと呼ばれる
- listで作成したリストは座標として扱うことができる
- consではドット対を作成することが可能