
- 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 - 符號
在 LISP 中,符號是一個表示資料物件的名稱,有趣的是它本身也是一個數據物件。
使符號特殊的是它們有一個稱為屬性列表或plist的元件。
屬性列表
LISP 允許您為符號分配屬性。例如,讓我們有一個“person”物件。我們希望這個“person”物件具有名稱、性別、身高、體重、地址、職業等屬性。屬性就像一個屬性名稱。
屬性列表實現為一個具有偶數(可能為零)個元素的列表。列表中的每一對元素構成一個條目;第一項是指示符,第二項是值。
建立符號時,其屬性列表最初為空。屬性是透過在setf表單中使用get來建立的。
例如,以下語句允許我們將屬性 title、author 和 publisher 以及相應的值分配給名為(符號)'book' 的物件。
示例
建立一個名為 main.lisp 的新原始碼檔案,並在其中鍵入以下程式碼。
main.lisp
; create object books, assign symbol title a value (write (setf (get 'books'title) '(Gone with the Wind))) ; terminate printing (terpri) ; update object books, assign symbol author a value (write (setf (get 'books 'author) '(Margaret Michel))) ; terminate printing (terpri) ; update object books, assign symbol publisher a value (write (setf (get 'books 'publisher) '(Warner Books)))
輸出
執行程式碼時,它返回以下結果:
(GONE WITH THE WIND) (MARGARET MICHEL) (WARNER BOOKS)
各種屬性列表函式允許您分配屬性以及檢索、替換或刪除符號的屬性。
get 函式返回給定指示符的符號的屬性列表。它具有以下語法:
get symbol indicator &optional default
get 函式查詢給定符號的屬性列表中指定的指示符,如果找到則返回相應的值;否則返回預設值(如果未指定預設值,則為 nil)。
示例
更新名為 main.lisp 的原始碼檔案,並在其中鍵入以下程式碼。
main.lisp
; create object books, assign symbol title a value (setf (get 'books 'title) '(Gone with the Wind)) ; create object books, assign symbol author a value (setf (get 'books 'author) '(Margaret Micheal)) ; create object books, assign symbol publisher a value (setf (get 'books 'publisher) '(Warner Books)) ; retrieve title from books object (write (get 'books 'title)) ; terminate printing (terpri) ; retrieve author from books object (write (get 'books 'author)) ; terminate printing (terpri) ; retrieve publisher from books object (write (get 'books 'publisher))
輸出
執行程式碼時,它返回以下結果:
(GONE WITH THE WIND) (MARGARET MICHEAL) (WARNER BOOKS)
symbol-plist 函式允許您檢視符號的所有屬性。
示例
建立一個名為 main.lisp 的新原始碼檔案,並在其中鍵入以下程式碼。
main.lisp
; create object annie, assign symbols values (setf (get 'annie 'age) 43) (setf (get 'annie 'job) 'accountant) (setf (get 'annie 'sex) 'female) (setf (get 'annie 'children) 3) ; terminate printing (terpri) ; print symbol lists (write (symbol-plist 'annie))
輸出
執行程式碼時,它返回以下結果:
(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43)
remprop 函式從符號中刪除指定的屬性。
示例
更新名為 main.lisp 的原始碼檔案,並在其中鍵入以下程式碼。
main.lisp
; create object annie, assign symbols values (setf (get 'annie 'age) 43) (setf (get 'annie 'job) 'accountant) (setf (get 'annie 'sex) 'female) (setf (get 'annie 'children) 3) ; terminate printing (terpri) ; print symbol lists (write (symbol-plist 'annie)) ; removing properties age (remprop 'annie 'age) ; terminate printing (terpri) ; print symbol lists (write (symbol-plist 'annie))
輸出
執行程式碼時,它返回以下結果:
(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43) (CHILDREN 3 SEX FEMALE JOB ACCOUNTANT)
廣告