「ドットペア」の版間の差分

提供:GizmoLabs - だいたい CAD LISP なサイト
(ページの作成:「AutoLISP のドットペア表記は、リスト表記の一種で LISP の基本的なデータ構造であるコンスセル(car と cdr のみがある状態)の…」)
 
編集の要約なし
 
20行目: 20行目:
; (list 'A 'B 'C) と同義なので、次の式は T となる。
; (list 'A 'B 'C) と同義なので、次の式は T となる。
  (equal (list 'A 'B 'C) (cons 'A (cons 'B (cons 'C '()))))
  (equal (list 'A 'B 'C) (cons 'A (cons 'B (cons 'C '()))))
-> T
次も同様
(equal '(1 . nil) '(1))
  -> T
  -> T



2023年9月20日 (水) 07:16時点における最新版

AutoLISP のドットペア表記は、リスト表記の一種で LISP の基本的なデータ構造であるコンスセル(car と cdr のみがある状態)のデータであることを意味します。 つまり、 コンスセル表記の (1 . 2) とリスト表記の (1 2) は表記は異なりますが、データとしては同じなので、

  • (car '(1 . 2)) と (car '(1 2)) の返り値は共に 1 。
  • (cdr '(1 . 2)) と (cdr '(1 2)) の返り値は共に 2 。

ということになります。


リスト表記をあえてドットペア表記にすると以下のようになります。

  • (1 2 3) → (1 . (2 . (3 . nil)))
  • (red blue . yellow) → (red . (blue . yellow))


(cons 1 2) -> (1 . 2) 
(list 1 2) -> (1 2)


(cons 'A (cons 'B (cons 'C '()))) ; cons 関数でリストを作成。
-> (A B C)
(list 'A 'B 'C) と同義なので、次の式は T となる。
(equal (list 'A 'B 'C) (cons 'A (cons 'B (cons 'C '()))))
-> T
次も同様
(equal '(1 . nil) '(1))
-> T


AutoLISP では、図形のデータを扱う場合にコンスセルを含んだエンティティのリストデータをよく扱います。

円のエンティティリスト

(-1 . <図形名: 222a36a8850>) (0 . "CIRCLE") (330 . <図形名: 222b6f229f0>) (5 . "2CD") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbCircle") (10 4092.2 32631.3 0.0) (40 . 3224.77) (210 0.0 0.0 1.0)