LISP - Strutture

Le strutture sono uno dei tipi di dati definiti dall'utente, che consente di combinare elementi di dati di diversi tipi.

Le strutture vengono utilizzate per rappresentare un record. Supponi di voler tenere traccia dei tuoi libri in una biblioteca. Potresti voler monitorare i seguenti attributi di ogni libro:

  • Title
  • Author
  • Subject
  • ID libro

Definizione di una struttura

Il defstructmacro in LISP consente di definire una struttura di record astratta. Ildefstruct L'istruzione definisce un nuovo tipo di dati, con più di un membro per il programma.

Per discutere il formato del file defstructmacro, scriviamo la definizione della struttura del Libro. Potremmo definire la struttura del libro come:

(defstruct book 
   title 
   author 
   subject 
   book-id 
)

notare che

  • La dichiarazione di cui sopra crea una struttura a libro con quattro named components. Quindi ogni libro creato sarà un oggetto di questa struttura.

  • Definisce quattro funzioni denominate titolo-libro, autore-libro, soggetto-libro e ID-libro-libro, che richiederanno un argomento, una struttura del libro e restituiranno i campi titolo, autore, soggetto e ID-libro del libro oggetto. Queste funzioni sono chiamateaccess functions.

  • Il libro dei simboli diventa un tipo di dati e puoi verificarlo utilizzando il typep predicato.

  • Ci sarà anche una funzione implicita denominata book-p, che è un predicato e sarà vero se il suo argomento è un libro ed è falso altrimenti.

  • Un'altra funzione implicita denominata make-book verrà creato, che è un file constructor, che, quando invocato, creerà una struttura dati con quattro componenti, adatta per l'utilizzo con le funzioni di accesso.

  • Il #S syntax si riferisce a una struttura e puoi usarla per leggere o stampare istanze di un libro.

  • Viene definita anche una funzione implicita denominata copy-book di un argomento. Prende un oggetto libro e crea un altro oggetto libro, che è una copia del primo. Questa funzione è chiamatacopier function.

  • Puoi usare setf per alterare i componenti di un libro, per esempio

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

Esempio

Crea un nuovo file di codice sorgente denominato main.lisp e digita il codice seguente.

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

Quando esegui il codice, restituisce il seguente risultato:

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