- LISP 教程
- LISP - 首頁
- LISP - 概述
- LISP - 環境
- LISP - 程式結構
- LISP - 基本語法
- LISP - 資料型別
- LISP - 宏
- LISP - 變數
- LISP - 常量
- LISP - 運算子
- LISP - 決策
- LISP - 迴圈
- LISP - 函式
- LISP - 謂詞
- LISP - 數字
- LISP - 字元
- LISP - 陣列
- LISP - 字串
- LISP - 序列
- LISP - 列表
- LISP - 符號
- LISP - 向量
- LISP - 集合
- LISP - 樹
- LISP - 雜湊表
- LISP - 輸入與輸出
- LISP - 檔案 I/O
- LISP - 結構
- LISP - 包
- LISP - 錯誤處理
- LISP - CLOS
- LISP 有用資源
- Lisp - 快速指南
- Lisp - 有用資源
- Lisp - 討論
LISP - 結構
結構是使用者定義的資料型別之一,允許您組合不同型別的資料項。
結構用於表示記錄。假設您想跟蹤圖書館中書籍的資訊。您可能希望跟蹤每本書的以下屬性:
- 標題
- 作者
- 主題
- 圖書 ID
定義結構
LISP 中的 **defstruct** 宏允許您定義抽象記錄結構。**defstruct** 語句定義了一種新的資料型別,為您的程式提供了多個成員。
為了討論 **defstruct** 宏的格式,讓我們編寫 Book 結構的定義。我們可以將 Book 結構定義為:
(defstruct book title author subject book-id )
請注意
以上宣告建立了一個具有四個**命名元件**的 Book 結構。因此,建立的每一本書都將是此結構的物件。
它定義了四個名為 book-title、book-author、book-subject 和 book-book-id 的函式,這些函式將接受一個引數(一個 Book 結構),並返回 Book 物件的 title、author、subject 和 book-id 欄位。這些函式稱為**訪問函式**。
符號 book 成為一種資料型別,您可以使用 **typep** 謂詞檢查它。
還將有一個名為 **book-p** 的隱式函式,它是一個謂詞,如果其引數是 Book 則為真,否則為假。
另一個名為 **make-book** 的隱式函式將被建立,它是一個**建構函式**,當被呼叫時,它將建立一個具有四個元件的資料結構,適合與訪問函式一起使用。
**#S 語法**指的是結構,您可以使用它來讀取或列印 Book 的例項。
還定義了一個名為 copy-book 的隱式函式,它接受一個引數。它接受一個 Book 物件並建立一個另一個 Book 物件,它是第一個物件的副本。此函式稱為**複製函式**。
您可以使用 **setf** 來更改 Book 的元件,例如
(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)