Структуры являются одним из определяемых пользователем типов данных, который позволяет комбинировать элементы данных разных видов.
Структуры используются для представления записи. Предположим, вы хотите отслеживать свои книги в библиотеке. Вы можете отслеживать следующие атрибуты о каждой книге —
- заглавие
- автор
- Предмет
- 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 и введите в него следующий код.
(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)
Когда вы выполняете код, он возвращает следующий результат —