「LISPデータタイプ(リスト)」の版間の差分

提供:GizmoLabs - だいたい CAD LISP なサイト
編集の要約なし
編集の要約なし
 
(同じ利用者による、間の1版が非表示)
11行目: 11行目:
(1 "ONE")
(1 "ONE")
</pre>
</pre>
なお、リスト表記の一種として 2つの値のリストを表す、[[ドットペア]] で表記されることがある。
<pre class="brush:autolisp;">
(10 . 20)
(10 20 . 30) <- (10 20 30) のリストと同じ。この形で使うことはまず無い。
</pre>
===連想リスト・連想配列===
Lispには連想リスト(連想配列)というものがある。
連想リスト(association list)、また、alist と呼ばれ、(key . val) という car がキー、cdrが値となるペアを格納したコンテナーであり、キーから値を検索できるようになっている。
他の言語ではマップやディクショナリーなどと呼ばれるもの。
<pre class="brush:autolisp;">
(setq *alist* '(("hoge" (1 2 3))
                ("fuga" (4 5 6))
                ("piyo" (7 8 9))))
(assoc "hoge" *alist*) ; キーのデータを取得。assoc関数を使う
("hoge" (1 2 3))
(cadr (assoc "hoge" *alist*))> ; キーの値のみ取得
(1 2 3)
</pre>
余談: assoc は alistの最初に見つかったキーを返す。つまり "hoge" を先に追加すれば元の値を消さずに更新されたように見せかける事ができる。


[[Category:AutoLISP]]
[[Category:AutoLISP]]

2022年6月8日 (水) 08:23時点における最新版

AutoLISP のリストは、関連する一連の値をスペースで区切り、括弧で囲んだもの。 リストは、複数の関連する値を格納するときに利用される。例えば 3D 点は 3 つの実数のリストで表されている。


正しいリストの例

(1.0 1.0 0.0)
("this" "that" "the other")
(1 "ONE")

なお、リスト表記の一種として 2つの値のリストを表す、ドットペア で表記されることがある。

(10 . 20)
(10 20 . 30) <- (10 20 30) のリストと同じ。この形で使うことはまず無い。


連想リスト・連想配列

Lispには連想リスト(連想配列)というものがある。 連想リスト(association list)、また、alist と呼ばれ、(key . val) という car がキー、cdrが値となるペアを格納したコンテナーであり、キーから値を検索できるようになっている。 他の言語ではマップやディクショナリーなどと呼ばれるもの。

(setq *alist* '(("hoge" (1 2 3))
                ("fuga" (4 5 6))
                ("piyo" (7 8 9))))

(assoc "hoge" *alist*) ; キーのデータを取得。assoc関数を使う
("hoge" (1 2 3))

(cadr (assoc "hoge" *alist*))> ; キーの値のみ取得
(1 2 3)

余談: assoc は alistの最初に見つかったキーを返す。つまり "hoge" を先に追加すれば元の値を消さずに更新されたように見せかける事ができる。