martes, 6 de enero de 2015

Números, cadenas y listas

Ya hemos dicho que AutoLISP admite como datos tanto números enteros (INT), como números en coma flotante con parte fraccionaria (REAL). Asimismo, admite, entre otros, cadenas (STR) y listas (LIST).

Números enteros y números en coma flotante

Las reglas de escritura que rigen para los números son bastante sencillas: AutoLISP asumirá como un número cualquier secuencia de dígitos conteniendo, o no, el punto decimal “.” o precedido, o no, por los signos de suma o resta “+ o –“ o con un marcador de exponencial “e”.

Se debe tener en cuenta que no se pueden utilizar números enteros cuando se necesite que el resultado sea un número real, esto debido a que AutoLISP truncará la parte decimal del resultado en consecuencia con los datos introducidos. Por ejemplo, para AutoLISP el resultado de dividir el entero 8 entre el entero 3 es 2. Pero basta con que uno de los dos números sea un real para que el resultado de la división sea correcto y se muestre en el resultado la parte fraccionaria, en este caso el 2.66667. Para escribir un entero como número real basta añadirle el punto decimal y un cero a la derecha.



El mayor número entero que puede almacenar AutoLISP es el 2.147.483.647, que correspondería a un espacio reservado de memoria de 32 bits. El número entero mayor que se puede representar depende de la cantidad de memoria reservada y de la posibilidad, o no, de representar números negativos. En teoría con 32 bits podríamos representar 2 elevado a 32=4.294.967.296 valores. Tratándose de enteros positivos podríamos, por tanto, representar los números entre el 0 y el +4.294.967.295 y, si se trata de representar enteros negativos y positivos, podríamos representar del -2.147.483.648 al +2.147.483.647. Cualquier número entero fuera de ese rango será convertido en real automáticamente por AutoLISP. Debemos tener en cuenta, sin embargo, que algunas funciones de AutoLISP, como la función getint solo admiten números enteros de 16 bits, es decir, entre el -32.678 y el +32767, por lo que es preferible, para evitar problemas, convertir en real cualquier número por encima de ese rango.

Ejemplos de números en AutoLISP:

473                    ; el número entero cuatrocientos setenta y tres.
25.3                     ; el número real veinticinco con tres décimas.
25.3e0                 ; el mismo número real anterior.
1.0e-3                  ; el número real equivalente a una milésima.
+143                    ; el entero positivo ciento cuarenta y tres.
-143                     ; el entero negativo ciento cuarenta y tres.
2.147.483.647     ; el entero positivo máximo.


Volvemos a recordar que si se pretenden escribir estos números directamente en la línea de órdenes de AutoCAD deben ir precedidos por el signo de cierre de exclamación.

En el ejemplo hemos escrito el entero 1 en la línea de comandos de AutoCAD y al apretar la tecla retorno AutoLISP responde 1:

Comando: !1
1




Cadenas

Las cadenas son expresiones encerradas entre comillas y que pueden contener espacios en blanco. AutoLISP reputará como un fallo de sintaxis cualquier apertura de comillas que no encuentre su par de cierre. Sin embargo, si las comillas desparejadas van precedidas del carácter barra inclinada hacia atrás “\”, AutoLISP permitirá incluirlas. Este carácter es omitido en la impresión de una cadena, de modo que si se quiere representar en el resultado es necesario colocarlo doble. Algunos ejemplos de cadenas son:

“pepe ama a lola” ; una cadena conteniendo varias palabras y espacios.
“pepe ama a lola ; expresión inválida (carece de comillas de cierre).
“pepe”                  ; la cadena que contiene los caracteres p, e, p, e.
“pe\pe”                  ; la cadena que contiene los mimos caracteres anteriores.
“pe\\pe”                 ; la cadena que contiene los caracteres p, e, \,  p, e.
“pe\”pe”                 ; la cadena que contiene los caracteres p, e,  “, p, e.

En el ejemplo hemos escrito la cadena “hola” en la línea de comandos de AutoCAD:

Comando: !”hola”
“hola”




Listas

La lista es la estructura fundamental de AutoLISP, recuerda que el nombre de LISP  proviene de “LIst Processing language”. Las listas proporcionan un poderoso método de almacenamiento de cualquier clase de símbolos. En particular, es un útil procedimiento para almacenar coordenadas bidimensionales y tridimensionales de los objetos de AutoCAD.

La regla que rige toda lista es estar contenida entre paréntesis y tener sus elementos separados por espacios. Si AutoLISP encuentra una lista con un paréntesis abierto sin su correspondiente par de cierre lo reputará como un fallo de sintaxis y devolverá error. Ejemplos de listas son:

(1 2 3)                    ; una lista conteniendo los enteros 1, 2, 3.
(x y z)                     ; una lista conteniendo los símbolos x, y, z.
(“abc” “cde”)          ; una lista conteniendo dos cadenas.
(x “abc” z)         ; una lista conteniendo símbolos y cadenas.
((1 2 3) (“abc”)) ; una lista conteniendo dos sublistas.
(+ 1 2)              ; una lista conteniendo un símbolo y dos enteros.
(0 . "LINE")             ; una lista de asociación de AutoCAD
(car list1)                ; una lista conteniendo un nombre de función y un símbolo
()                         ; una lista vacía, equivale a nil o nada.


¡Espera! No teclees en seguida una lista en la línea de comandos de AutoCAD, como hemos hecho con el entero y repetido con la cadena, no funcionará. ¿Por qué? Eso lo veremos en el próximo capítulo.

No hay comentarios:

Publicar un comentario