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)