リストは、関連する一連の値をスペースで区切り、括弧で囲んだものです。
リストは、複数の関連する値を格納するときに効率的な方法です。なにしろ、LISP はリスト処理(LISt Processing)言語であるために、LISP と呼ばれています。リストの能力を理解すれば、より強力で柔軟性のあるアプリケーションを作成できることが分かるでしょう。リストは 2D 座標値や 3D 座標値、図形データなどを表すために使用されます。
リストの例には、(1.0 1.0 0.0)、("this" "that" "the other")、(1 . "One" などがあります。
AutoLISP には、リストを扱うための関数が多数あります。次に、最も一般的に使用される関数をいくつか紹介します。
list 関数は、関連する項目をグループ化する簡単な方法です。これらの項目は、類似のデータ タイプである必要はなく、他のリストであってもかまいません。次のコードは、3 つの項目をリストとしてグループ化します。
(setq lst1 (list 1.0 "One" 1)) (1.0 "One" 1)
リストは、quote (または ' )関数を使用して作成することができます。
(setq lst1 '(1.0 "One" 1)) (1.0 "One" 1)
append 関数を使用すると、リストの末尾に新しい項目を追加することができます。cons 関数を使用すると、リストの先頭に新しい項目を追加することができます。 subst 関数を使用すると、古い項目があるたびに新しい項目に置き換えることができます。これらの関数は元のリストを変更せず、変更後のリストを返します。元のリストを変更する必要がある場合は、明示的に古いリストを新しいリストで置き換えます。
append 関数は、任意の数のリストを 1 つのリストにまとめます。したがって、この関数の引数はすべてリストでなければなりません。次のコードは、別の "One" をリスト lst1 に格納されているリストに追加します。
(setq lst2 (append lst1 '("One"))) (1.0 "One" 1 "One")
cons 関数は、1 つの要素をリストに結合します。cons 関数を使用すると、別の文字列 "One" をリスト lst2 の先頭に追加することができます。
(setq lst3 (cons "One" lst2 )) ("One" 1.0 "One" 1 "One")
subst 関数を使用すると、リスト内の指定された項目をすべて新しい項目で置き換えることができます。次の例は、文字列 "One" をすべて文字列 "one" で置き換えます。
(setq lst4 (subst "one" "One" lst3)) ("one" 1.0 "one" 1 "one")
nth 関数を使用して、リストから特定の項目を取得することができます。この関数には、2 つの引数を指定します。最初の引数は、どの項目を返すかを指定する整数です。リストはインデックス 0 から始まります。最初の引数として 0(ゼロ)を指定するとリストの最初の項目が返され、1 を指定すると 2 番目の項目が返されるというようになります.2 番目の引数には、項目を取り出すリストを指定します。次に示すコードは、lst1 の 2 番目の項目を返します。
(nth 1 lst1) "One"
car 関数は、リストの先頭の項目を返します。例:
(car lst1) 1.0
cdr 関数は、リストの先頭の項目以外のすべての要素を新しいリストとして返します。例:
(cdr lst1) ("One" 1)
AutoLISP には、car 関数と cdr 関数を組み合わせた多数の追加的な関数も用意されています。たとえば、cadr 関数はリストの 2 番目の要素を返し、caddr 関数はリストの 3 番目の要素を返します。cadr 関数は、リストに対して cdr 関数を使用し、その返されたリストに対して car 関数を使用したのと同じです。
(cadr lst1) "One" (car (cdr lst1)) "One"