LISP - Structures

Les structures font partie du type de données défini par l'utilisateur, ce qui vous permet de combiner des éléments de données de différents types.

Les structures sont utilisées pour représenter un enregistrement. Supposons que vous souhaitiez garder une trace de vos livres dans une bibliothèque. Vous souhaiterez peut-être suivre les attributs suivants pour chaque livre -

  • Title
  • Author
  • Subject
  • ID du livre

Définition d'une structure

le defstructmacro dans LISP vous permet de définir une structure d'enregistrement abstraite. ledefstruct L'instruction définit un nouveau type de données, avec plus d'un membre pour votre programme.

Pour discuter du format du defstructmacro, écrivons la définition de la structure Book. Nous pourrions définir la structure du livre comme -

(defstruct book 
   title 
   author 
   subject 
   book-id 
)

Notez s'il vous plaît

  • La déclaration ci-dessus crée une structure de livre avec quatre named components. Ainsi, chaque livre créé sera un objet de cette structure.

  • Il définit quatre fonctions nommées titre-livre, auteur-livre, sujet-livre et id-livre-livre, qui prendront un argument, une structure de livre, et renverront les champs titre, auteur, sujet et id-livre du livre objet. Ces fonctions sont appeléesaccess functions.

  • Le livre de symboles devient un type de données et vous pouvez le vérifier à l'aide du typep prédicat.

  • Il y aura également une fonction implicite nommée book-p, qui est un prédicat et sera vrai si son argument est un livre et est faux dans le cas contraire.

  • Une autre fonction implicite nommée make-book sera créé, ce qui est un constructor, qui, une fois invoquée, créera une structure de données avec quatre composants, utilisable avec les fonctions d'accès.

  • le #S syntax fait référence à une structure et vous pouvez l'utiliser pour lire ou imprimer des instances d'un livre.

  • Une fonction implicite nommée copy-book d'un argument est également définie. Il prend un objet livre et crée un autre objet livre, qui est une copie du premier. Cette fonction s'appelle lecopier function.

  • Vous pouvez utiliser setf pour modifier les composants d'un livre, par exemple

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

Exemple

Créez un nouveau fichier de code source nommé main.lisp et tapez le code suivant dedans.

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

Lorsque vous exécutez le code, il renvoie le résultat suivant -

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