LISP - Структуры

Структуры - это один из определяемых пользователем типов данных, который позволяет комбинировать элементы данных разных типов.

Структуры используются для представления записи. Предположим, вы хотите отслеживать свои книги в библиотеке. Возможно, вы захотите отслеживать следующие атрибуты каждой книги -

  • Title
  • Author
  • Subject
  • Идентификатор книги

Определение структуры

В defstructМакрос в LISP позволяет вам определять абстрактную структуру записи. Вdefstruct оператор определяет новый тип данных с более чем одним членом для вашей программы.

Обсудить формат defstructмакрос, напишем определение структуры Book. Мы могли бы определить структуру книги как -

(defstruct book 
   title 
   author 
   subject 
   book-id 
)

пожалуйста, обратите внимание

  • Приведенное выше объявление создает структуру книги с четырьмя named components. Таким образом, каждая созданная книга будет объектом этой структуры.

  • Он определяет четыре функции с именами book-title, book-author, book-subject и book-book-id, которые будут принимать один аргумент, структуру книги, и будут возвращать заголовок полей, автора, тему и идентификатор книги книги. объект. Эти функции называютсяaccess functions.

  • Книга символов становится типом данных, и вы можете проверить это с помощью typep предикат.

  • Также будет неявная функция с именем book-p, который является предикатом и будет истинным, если его аргументом является книга, и ложным в противном случае.

  • Другая неявная функция с именем make-book будет создан, что является constructor, который при вызове создаст структуру данных с четырьмя компонентами, подходящую для использования с функциями доступа.

  • В #S syntax относится к структуре, и вы можете использовать ее для чтения или печати экземпляров книги.

  • Также определяется неявная функция с именем тетрадь одного аргумента. Он берет объект книги и создает другой объект книги, который является копией первого. Эта функция называется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 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)