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)