LISP - Estructuras

Las estructuras son uno de los tipos de datos definidos por el usuario, lo que le permite combinar elementos de datos de diferentes tipos.

Las estructuras se utilizan para representar un registro. Suponga que desea realizar un seguimiento de sus libros en una biblioteca. Es posible que desee realizar un seguimiento de los siguientes atributos sobre cada libro:

  • Title
  • Author
  • Subject
  • ID del libro

Definición de una estructura

los defstructmacro en LISP le permite definir una estructura de registro abstracta. losdefstruct declaración define un nuevo tipo de datos, con más de un miembro para su programa.

Para discutir el formato del defstructmacro, escribamos la definición de la estructura del Libro. Podríamos definir la estructura del libro como:

(defstruct book 
   title 
   author 
   subject 
   book-id 
)

tenga en cuenta

  • La declaración anterior crea una estructura de libro con cuatro named components. Entonces, cada libro creado será un objeto de esta estructura.

  • Define cuatro funciones denominadas book-title, book-author, book-subject y book-book-id, que tomarán un argumento, una estructura de libro y devolverán los campos título, autor, asunto y book-id del libro. objeto. Estas funciones se denominanaccess functions.

  • El libro de símbolos se convierte en un tipo de datos y puede verificarlo usando el typep predicado.

  • También habrá una función implícita llamada book-p, que es un predicado y será verdadero si su argumento es un libro y es falso en caso contrario.

  • Otra función implícita llamada make-book será creado, que es un constructor, que, cuando se invoca, creará una estructura de datos con cuatro componentes, adecuados para su uso con las funciones de acceso.

  • los #S syntax hace referencia a una estructura y puede utilizarla para leer o imprimir instancias de un libro.

  • Una función implícita denominada copy-book de un argumento también se define eso. Toma un objeto de libro y crea otro objeto de libro, que es una copia del primero. Esta función se llamacopier function.

  • Puedes usar setf para alterar los componentes de un libro, por ejemplo

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

Ejemplo

Cree un nuevo archivo de código fuente llamado main.lisp y escriba el siguiente código en él.

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

Cuando ejecuta el código, devuelve el siguiente resultado:

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