next up previous contents
Next: B.1.2 Otros tipos de Up: LE-LISP Previous: LE-LISP

Los objetos LE-LISP

El lenguaje LE-LISP opera con objetos llamados expresiones simbólicas o más brevemente S-expresiones, que se pueden clasificar como sigue:

Símbolos

 

Son identificadores que nombran variables, funciones o etiquetas. LE-LISP representa un símbolo como un puntero a un descriptor localizado en una zona especial de memoria. Cada descriptor tiene las siguientes propiedades intrínsecas:

No es aconsejable que el usuario manipule directamente las propiedades intrínsecas de los símbolos.

Números

LE-LISP utiliza enteros de 16 bits, mientras que los números en coma flotante se representan utilizando 31, 32 48 o 64 bits, dependiendo de la implementación concreta. También incorpora bibliotecas para la manipulación de números de precisión arbitraria.

Cadenas de caracteres

Se representan externamente encerrando entre comillas los caracteres que los componen. Si la cadena contiene en sí misma el carácter de las comillas, éste se consigue insertando dos comillas consecutivas en la posición adecuada de la cadena.

El tipo de una cadena de caracteres es string por defecto, aunque puede cambiarse a voluntad mediante el uso de la función typestring.

Listas

LE-LISP utiliza para representar las listas el formalismo estándar del CAR y del CDR. Brevemente, diremos que el primer elemento de una lista constituye su CAR, mientras que el resto de la lista constituye el CDR. La función cons se utiliza para construir listas, de modo que (cons car cdr) construye la lista que tiene como CAR a car y como CDR a cdr.

Las listas se representan encerrando sus elementos entre paréntesis, separando los distintos componentes, que pueden ser de tipos diferentes, mediante espaciosgif. La notación especial del par punteado, como por ejemplo (1 . "pepe"), se utiliza cuando el CDR es un átomo.

La lista vacía está identificada con el átomo NIL. Entre otras consecuencias, esto implica que NIL se puede considerar al mismo tiempo como:

  1. Un átomo cualquiera llamado NIL.
  2. La lista vacía.
  3. El valor lógico Falso.

En relación al tercer caso, diremos que cualquier objeto LE-LISP distinto de NIL se considera, desde el punto de vista de su valor lógico, como verdadero. Si no se pone una quotegif delante de una lista, se entiende que su primer elemento es una función que toma como argumentos los siguientes elementos de la lista.

Vectores

Se corresponde con el tipo de los arrays unidimensionales que poseen la mayoría de los lenguajes de programación. Un vector es una colección de objetos LE-LISP a los cuales se puede acceder por medio de un índice, su posición en el vector, teniendo en cuenta que el primer elemento ocupa la posición 0. El tipo por defecto de un vector es vector, pero puede ser cambiado a voluntad de modo similar a como acurría en el caso de las cadenas de caracteres, pero utilizando en este caso la función vector.

Los vectores se representan de la forma tex2html_wrap_inline13835, donde los tex2html_wrap_inline13837 representan S-expresiones. El acceso a los elementos de un vector es muy rápido, aunque en las implementaciones de LE-LISP el número de elementos de un vector está limitado a 32767. Los vectores se almacenan en una zona especial de la memoria que se compacta dinamicamente mediante un algoritmo de garbage collectiongif que es lineal en tiempo.

Como el valor de un vector es el vector en sí mismo, no hay necesiad de utilizar la quote como en las listas. Aunque los vectores son unidimensionales, como un vector es a su vez una S-expresión, sí están permitidos los vectores de vectores.


next up previous contents
Next: B.1.2 Otros tipos de Up: LE-LISP Previous: LE-LISP

Miguel A. Alonso Pardo
Thu Nov 20 16:47:01 CET 1997