鍍金池/ 教程/ Java/ LISP - 結(jié)構(gòu)
LISP - 樹
LISP - 錯誤處理
LISP - 謂詞
LISP - 決策
LISP - 變量
LISP - 數(shù)組
LISP - 對象系統(tǒng)(CLOS)
LISP - 輸入和輸出
Lisp教程
LISP - 數(shù)字
LISP - 循環(huán)
LISP - 常量
LISP - 集合
LISP - 字符
LISP - 程序結(jié)構(gòu)
LISP - 文件I/O
LISP - 哈希表
LISP - 宏
LISP - 數(shù)據(jù)類型
LISP - 包
LISP - 符號
LISP - 運算符
LISP - 基本語法
LISP - 函數(shù)
LISP - 向量
LISP - 結(jié)構(gòu)
LISP - 概述介紹

LISP - 結(jié)構(gòu)

結(jié)構(gòu)是用戶定義的數(shù)據(jù)類型,它讓用戶可以合并不同種類的數(shù)據(jù)項。

結(jié)構(gòu)被用于表示記錄。假設(shè)要跟蹤圖書館中的書籍??赡芟M櫫私饷勘緯囊韵聦傩裕?/p>

  • 標題 - Title

  • 作者 - Author

  • 科目 - Subject

  • 書籍編號 - Book ID

定義一個結(jié)構(gòu)

LISP的defstruct宏允許定義一個抽象的記錄結(jié)構(gòu)。defstruct語句定義了一個新的數(shù)據(jù)類型,項目結(jié)構(gòu)中不止一個成員。

討論defstruct宏的格式,編寫本書的結(jié)構(gòu)的定義??梢远x本書的結(jié)構(gòu)為:

(defstruct book 
  title 
  author 
  subject 
  book-id 
 )

請注意:

  • 上述聲明創(chuàng)建一個本書結(jié)構(gòu)有四個命名組件。因此,創(chuàng)建的每一個本書將是這個結(jié)構(gòu)的對象。

  • 它定義了一個名為book-title,book-subject,book-book-id的書籍,這將需要一個參數(shù),書的結(jié)構(gòu),并且將返回的字段標題,作者,主題和本書的book-book-id對象。這些函數(shù)被稱為接入功能。

  • 符號書成為一個數(shù)據(jù)類型,它可以使用typep謂詞檢查。

  • 也將命名為book-p隱函數(shù),這是一個謂詞,將為true,如果它的參數(shù)是本、書,則返回false。

  • 另一個名為make-book 隱函數(shù)將被創(chuàng)建,這是一種構(gòu)造方法,其中,當被調(diào)用時,將創(chuàng)建一個數(shù)據(jù)結(jié)構(gòu)具有四個組件,適于與所述接入功能的使用。

  • #S語法指的是一個結(jié)構(gòu),可以用它來讀取或打印一本書的實例

  • copy-book書本參數(shù)還定義了隱函數(shù)。這需要書的對象,并創(chuàng)建另一個書的對象,這是第一個副本。調(diào)用此函數(shù)復(fù)印機功能。

  • 可以使用setf改變書籍的組成結(jié)構(gòu),例如

(setf (book-book-id book3) 100)

示例

創(chuàng)建一個名為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)

當執(zhí)行代碼,它返回以下結(jié)果:

#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

上一篇:LISP - 文件I/O