Учебники

ЛИСП — Структуры

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

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

  • заглавие
  • автор
  • Предмет
  • ID книги

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

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

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

(defstruct book 
   title 
   author 
   subject 
   book-id 
)

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

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

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

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

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

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

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

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

  • Вы можете использовать setf, чтобы изменить компоненты книги, например

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

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

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

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

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

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

Также определяется неявная функция с именем copy-book одного аргумента. Он берет объект книги и создает другой объект книги, который является копией первого. Эта функция называется функцией копира.

Вы можете использовать setf, чтобы изменить компоненты книги, например

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

пример

Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.

Live Demo

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

Когда вы выполняете код, он возвращает следующий результат —