定义结构
defstructLISP 中的宏允许您定义一个抽象的记录结构。defstruct语句定义了一种新的数据类型,为您的程序提供了多个成员。
讨论格式defstruct宏,让我们写下 Book 结构的定义。我们可以将书籍结构定义为 -
(defstruct book
title
author
subject
book-id
)
请注意
-
上面的声明创建了一个 book 结构,有四个named components.所以创建的每一本书都将是这个结构的一个对象。
-
它定义了四个函数,名为 book-title、book-author、book-subject 和 book-book-id,它们将接受一个参数,一个书籍结构,并将返回书籍的标题、作者、主题和 book-id 字段目的。这些函数称为access functions.
-
符号书成为一种数据类型,您可以使用typep谓词。
-
还将有一个名为book-p,这是一个谓词,如果它的论点是一本书则为真,否则为假。
-
另一个隐式函数名为make-book将被创建,这是一个constructor,调用时,将创建一个包含四个组件的数据结构,适用于访问函数。
-
#S syntax指的是一个结构,你可以用它来阅读或打印一本书的实例。
-
还定义了一个名为 copy-book of one argument 的隐式函数。它获取一个书对象并创建另一个书对象,它是第一个书对象的副本。这个函数称为copier function.
-
您可以使用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 Moo"
:subject "C-Programming Tutorial"
:book-id "478")
)
( setq book2 (make-book :title "Telecom Billing"
:author "Alex Moo"
: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 Moo" :SUBJECT "C-Programming Tutorial" :BOOK-ID "478")
#S(BOOK :TITLE "Telecom Billing" :AUTHOR "Alex Moo" :SUBJECT "C-Programming Tutorial" :BOOK-ID "501")
#S(BOOK :TITLE "C Programming" :AUTHOR "Nuha Moo" :SUBJECT "C-Programming Tutorial" :BOOK-ID 100)