LISP - Cấu trúc

Cấu trúc là một trong những kiểu dữ liệu do người dùng xác định, cho phép bạn kết hợp các mục dữ liệu thuộc các loại khác nhau.

Các cấu trúc được sử dụng để biểu diễn một bản ghi. Giả sử bạn muốn theo dõi sách của mình trong thư viện. Bạn có thể muốn theo dõi các thuộc tính sau về mỗi cuốn sách -

  • Title
  • Author
  • Subject
  • ID sách

Xác định cấu trúc

Các defstructmacro trong LISP cho phép bạn xác định cấu trúc bản ghi trừu tượng. Cácdefstruct câu lệnh xác định một kiểu dữ liệu mới, với nhiều hơn một thành viên cho chương trình của bạn.

Để thảo luận về định dạng của defstructmacro, hãy để chúng tôi viết định nghĩa của cấu trúc Sách. Chúng tôi có thể định nghĩa cấu trúc sách là -

(defstruct book 
   title 
   author 
   subject 
   book-id 
)

Xin lưu ý

  • Khai báo trên tạo một cấu trúc sách với bốn named components. Vì vậy, mọi cuốn sách được tạo ra sẽ là một đối tượng của cấu trúc này.

  • Nó xác định bốn hàm có tên book-title, book-author, book-subject và book-book-id, sẽ nhận một đối số, cấu trúc sách và sẽ trả về các trường tên sách, tác giả, chủ đề và id sách của cuốn sách vật. Các chức năng này được gọi làaccess functions.

  • Sổ ký hiệu trở thành một kiểu dữ liệu và bạn có thể kiểm tra nó bằng cách sử dụng typep Thuộc tính.

  • Cũng sẽ có một hàm ngầm có tên book-p, là một vị từ và sẽ đúng nếu đối số của nó là một cuốn sách và sai nếu ngược lại.

  • Một hàm ẩn khác có tên make-book sẽ được tạo ra, đó là một constructor, mà khi được gọi, sẽ tạo ra một cấu trúc dữ liệu với bốn thành phần, thích hợp để sử dụng với các chức năng truy cập.

  • Các #S syntax đề cập đến một cấu trúc và bạn có thể sử dụng nó để đọc hoặc in các bản sao của một cuốn sách.

  • Một hàm ngầm định có tên là copy-book của một đối số cũng được định nghĩa như vậy. Nó lấy một đối tượng sách và tạo một đối tượng sách khác, là bản sao của đối tượng đầu tiên. Chức năng này được gọi làcopier function.

  • Bạn có thể dùng setf để thay đổi các thành phần của một cuốn sách, chẳng hạn như

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

Thí dụ

Tạo một tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

(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)

Khi bạn thực thi mã, nó trả về kết quả sau:

#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)