Lisp-structures
提供:Dev Guides
LISP-構造
構造はユーザー定義のデータ型の1つであり、異なる種類のデータ項目を組み合わせることができます。
構造は、レコードを表すために使用されます。 図書館で本を追跡したいとします。 あなたは、各本に関する次の属性を追跡することができます-
- タイトル
- 著者
- 件名
- ブックID
構造の定義
LISPの defstruct マクロを使用すると、抽象レコード構造を定義できます。 defstruct ステートメントは、プログラムに複数のメンバーを持つ新しいデータ型を定義します。
*defstruct* マクロの形式について説明するために、Book構造の定義を記述しましょう。 本の構造を次のように定義できます-
(defstruct book
title
author
subject
book-id
)
ご注意ください
- 上記の宣言は、4つの*名前付きコンポーネント*を含むブック構造を作成します。したがって、作成されるすべてのブックはこの構造のオブジェクトになります。
- book-title、book-author、book-subject、book-book-idという名前の4つの関数を定義します。これらは1つの引数、ブック構造を取り、フィールドのタイトル、著者、サブジェクト、ブックのbook-idを返します。オブジェクト。 これらの関数は*アクセス関数*と呼ばれます。
- シンボルブックはデータ型になり、 typep 述語を使用して確認できます。
- また、* book-pという名前の暗黙的な関数もあります。これは述語であり、引数が本の場合はtrue、それ以外の場合はfalseです。
- make-book という名前の別の暗黙関数が作成されます。これは、呼び出されると、アクセス関数での使用に適した4つのコンポーネントを持つデータ構造を作成する constructor です。
- *#S構文*は構造を指し、それを使用して本のインスタンスを読んだり印刷したりできます。
- 1つの引数のcopy-bookという名前の暗黙的な関数も定義されています。 ブックオブジェクトを取得し、最初のオブジェクトのコピーである別のブックオブジェクトを作成します。 この機能は*コピー機能*と呼ばれます。
- setf を使用して、ブックのコンポーネントを変更できます。たとえば、
(setf (book-book-id book3) 100)
例
main.lispという名前の新しいソースコードファイルを作成し、次のコードを入力します。
(defstruct book
title
author
subject
book-id
)
( setq book1 (make-book :title "C Programming"
:author "Nuha Ali"
:subject "C-Programming Tutorial"
:book-id "478")
)
( setq book2 (make-book :title "Telecom Billing"
:author "Zara Ali"
:subject "C-Programming Tutorial"
:book-id "501")
)
(write book1)
(terpri)
(write book2)
(setq book3( copy-book book1))
(setf (book-book-id book3) 100)
(terpri)
(write book3)
あなたがコードを実行すると、それは次の結果を返します-
#S(BOOK :TITLE "C Programming" :AUTHOR "Nuha Ali" :SUBJECT "C-Programming Tutorial" :BOOK-ID "478")
#S(BOOK :TITLE "Telecom Billing" :AUTHOR "Zara Ali" :SUBJECT "C-Programming Tutorial" :BOOK-ID "501")
#S(BOOK :TITLE "C Programming" :AUTHOR "Nuha Ali" :SUBJECT "C-Programming Tutorial" :BOOK-ID 100)