あなたが探しているものは正確には明らかではありません。構造体のデフォルトのケースは、固定数のスロットを持つレコード タイプで、それぞれに名前があり、defstruct
マクロによって生成された関数を介してアクセスできます。たとえば、完了したら
(defstruct node
label)
node
のラベルにアクセスしてnode-label
高速なルックアップ時間を得ることができます (通常はメモリ チャンクへの単なるインデックスであるため)。ここで、あなたがやっているように、リストを構造体の実装として使用することを選択できます。この場合、はornode-label
の単なるエイリアスです。car
first
(defstruct (node (:type list))
label)
CL-USER> (make-node :label 'some-label)
(SOME-LABEL)
CL-USER> (node-label (make-node :label 'some-label))
SOME-LABEL
CL-USER> (first (make-node :label 'some-label))
SOME-LABEL
CL-USER> (car (make-node :label 'some-label))
任意のリストベースのキーと値のペアを探している場合は、Common Lisp にいくつかの便利な関数が含まれているプロパティ listが必要になるでしょう。
プロパティ リストも含む構造体が必要な場合は、そのリストに値を設定する特別なコンストラクターを追加できます。例えば、
(defstruct (node (:type list)
(:constructor make-node (label &rest plist)))
label
plist)
CL-USER> (make-node 'some-label :one 1 :two 2)
(SOME-LABEL (:ONE 1 :TWO 2))
CL-USER> (node-plist (make-node 'some-label :one 1 :two 2))
(:ONE 1 :TWO 2)