リスト|要素の取得・追加・検索の基本
car、cdr、length、member、cons、appendでリストを操作します。色名のリストを使い、処理前後に何が返るかを確認します。
始める前に
先に確認すると読み進めやすい記事:
確認の手順
- 掲載例の色名リストを作成します。
- carとcdrで、先頭と残りの要素を確認します。
- lengthとmemberで件数と検索結果を調べます。
- consとappendで要素を追加し、元のリストとの違いを確認します。
(setq colors '("赤" "青" "緑"))STEP 1:リストの構造を理解する
AutoLISPのリストは、内部的には「consセル」と呼ばれる2つの要素のペアで構成されています。
CAR:リストの先頭要素CDR:残りのリスト(次のペア)
この構造を使って、リストを順番に分解できます:
(car colors) ; => "赤"
(cdr colors) ; => ("青" "緑")
(car (cdr colors)) ; => "青"
(cdr (cdr colors)) ; => ("緑")リストは、先頭の要素と残りのリストに分けて取り出せます。
STEP 2:要素の数を調べる (length)
(length colors) ; => 3リストの要素数を取得するには length 関数を使います。入れ子リストがあっても、最上位の要素数を返します。
STEP 3:要素を検索する (member)
(member "青" colors) ; => ("青" "緑")
(member "黄" colors) ; => nilmember 関数は、指定した要素がリストに含まれているかを調べます。見つかった場合は、その要素以降のリストが返されます。
STEP 4:要素を追加する (cons) と (append)
cons:先頭に追加
(cons "白" colors)
; => ("白" "赤" "青" "緑")append:末尾に追加
(append colors '("黒"))
; => ("赤" "青" "緑" "黒")※ append はリスト同士の結合なので、単一要素は list で包む必要があります。
STEP 5:要素を削除する(Visual LISP拡張)
AutoLISPには直接削除する関数がないため、vl-remove を使って新しいリストを作成します。
(vl-remove "青" colors)
; => ("赤" "緑")STEP 6:リストの逆順 (reverse)
(reverse colors)
; => ("緑" "青" "赤")順序を入れ替えたいときに便利です。reverse は元のリストを変更せず、新しいリストを返します。
STEP 7:リストかどうかを判定する (listp) と (atom)
(listp colors) ; => T
(atom colors) ; => NILlistpはリストかどうかを判定atomはリスト以外(数値、文字列、シンボルなど)かを判定
STEP 8:応用例:色リストを属性に変換する
以下は、色リストを使って属性付きブロックに色ラベルを追加する例です。
(defun c:addColorAttr ()
(foreach clr colors
(command "_-insert" "ColorLabel" "0,0" "1" "1" "0")
(command "_attedit" "_N" "_Color" clr)
)
)※この例では、”ColorLabel” というブロックに "Color" 属性を設定しています。
まとめ:AutoLISPのリストは「データの道具箱」
リストはAutoLISPの基本構造であり、図面処理の自動化に欠かせない道具です。このように「色」をテーマにすることで、リストの構造と操作がより直感的に理解できたのではないでしょうか。
結果の確認
関数が返す新しいリストと、変数に保存されているリストを区別します。memberは真偽値だけでなく、見つかった要素以降のリストを返します。
参照資料
対象環境・動作確認
AutoLISP対応環境(関数・OSごとの対応は要確認)。内容更新:2026年10月5日。掲載コードのCAD実機検証は未実施です。図形を変更する例は、コピーした図面で結果を確認してください。