LISP - Struktury
Struktury to jeden z typów danych zdefiniowanych przez użytkownika, który umożliwia łączenie elementów danych różnych typów.
Struktury służą do reprezentowania rekordu. Załóżmy, że chcesz śledzić swoje książki w bibliotece. Możesz chcieć śledzić następujące atrybuty dotyczące każdej książki -
- Title
- Author
- Subject
- Identyfikator książki
Definiowanie struktury
Plik defstructMakro w LISP-ie pozwala na zdefiniowanie abstrakcyjnej struktury rekordu. Plikdefstruct Instrukcja definiuje nowy typ danych z więcej niż jednym składnikiem programu.
Aby omówić format defstructmakro, napiszmy definicję struktury książki. Możemy zdefiniować strukturę książki jako -
(defstruct book
title
author
subject
book-id
)
Proszę zanotować
Powyższa deklaracja tworzy strukturę książki z czterema named components. Tak więc każda stworzona książka będzie przedmiotem tej struktury.
Definiuje cztery funkcje o nazwach tytuł książki, autor książki, temat książki i identyfikator książki, które przyjmą jeden argument, strukturę książki i zwrócą pola tytuł, autor, temat i identyfikator książki obiekt. Te funkcje są nazywaneaccess functions.
Książka symboli staje się typem danych i można to sprawdzić za pomocą typep orzec.
Pojawi się również niejawna funkcja o nazwie book-p, który jest predykatem i będzie prawdziwy, jeśli jego argumentem jest książka, aw przeciwnym razie jest fałszywy.
Inna niejawna funkcja o nazwie make-book zostanie utworzony, czyli plik constructor, który po wywołaniu utworzy strukturę danych z czterema komponentami, nadającą się do użycia z funkcjami dostępu.
Plik #S syntax odnosi się do struktury i można jej używać do czytania lub drukowania wystąpień książki.
Zdefiniowana jest również funkcja niejawna o nazwie copy-book z jednym argumentem. Pobiera obiekt książki i tworzy inny obiekt książki, który jest kopią pierwszego. Ta funkcja nosi nazwęcopier function.
Możesz użyć setf na przykład do zmiany elementów książki
(setf (book-book-id book3) 100)
Przykład
Utwórz nowy plik kodu źródłowego o nazwie main.lisp i wpisz w nim następujący kod.
(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)
Po wykonaniu kodu zwraca następujący wynik -
#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)