LISP - Símbolos

En LISP, un símbolo es un nombre que representa objetos de datos y, curiosamente, también es un objeto de datos.

Lo que hace que los símbolos sean especiales es que tienen un componente llamado property listo plist.

Listas de propiedades

LISP le permite asignar propiedades a los símbolos. Por ejemplo, tengamos un objeto "persona". Nos gustaría que este objeto 'persona' tuviera propiedades como nombre, sexo, altura, peso, dirección, profesión, etc. Una propiedad es como un nombre de atributo.

Una lista de propiedades se implementa como una lista con un número par (posiblemente cero) de elementos. Cada par de elementos de la lista constituye una entrada; el primer elemento es elindicator, y el segundo es el value.

Cuando se crea un símbolo, su lista de propiedades está inicialmente vacía. Las propiedades se crean usandoget Dentro de un setf formar.

Por ejemplo, las siguientes declaraciones nos permiten asignar títulos de propiedades, autor y editor, y valores respectivos, a un objeto llamado (símbolo) 'libro'.

Ejemplo 1

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

(write (setf (get 'books'title) '(Gone with the Wind)))
(terpri)
(write (setf (get 'books 'author) '(Margaret Michel)))
(terpri)
(write (setf (get 'books 'publisher) '(Warner Books)))

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

(GONE WITH THE WIND)
(MARGARET MICHEL)
(WARNER BOOKS)

Varias funciones de lista de propiedades le permiten asignar propiedades, así como recuperar, reemplazar o eliminar las propiedades de un símbolo.

los getLa función devuelve la lista de propiedades del símbolo para un indicador dado. Tiene la siguiente sintaxis:

get symbol indicator &optional default

los getla función busca la lista de propiedades del símbolo dado para el indicador especificado, si lo encuentra, devuelve el valor correspondiente; de lo contrario, se devuelve el valor predeterminado (o nulo, si no se especifica un valor predeterminado).

Ejemplo 2

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

(setf (get 'books 'title) '(Gone with the Wind))
(setf (get 'books 'author) '(Margaret Micheal))
(setf (get 'books 'publisher) '(Warner Books))

(write (get 'books 'title))
(terpri)
(write (get 'books 'author))
(terpri)
(write (get 'books 'publisher))

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

(GONE WITH THE WIND)
(MARGARET MICHEAL)
(WARNER BOOKS)

los symbol-plist La función le permite ver todas las propiedades de un símbolo.

Ejemplo 3

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

(setf (get 'annie 'age) 43)
(setf (get 'annie 'job) 'accountant)
(setf (get 'annie 'sex) 'female)
(setf (get 'annie 'children) 3)

(terpri)
(write (symbol-plist 'annie))

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

(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43)

los remprop función quita la propiedad especificada de un símbolo.

Ejemplo 4

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

(setf (get 'annie 'age) 43)
(setf (get 'annie 'job) 'accountant)
(setf (get 'annie 'sex) 'female)
(setf (get 'annie 'children) 3)

(terpri)
(write (symbol-plist 'annie))
(remprop 'annie 'age)
(terpri)
(write (symbol-plist 'annie))

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

(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43)
(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT)