miércoles, 18 de febrero de 2015

¿Cómo se asigna valor a un símbolo en AutoLISP?

En algunos lenguajes de programación la variable es un recipiente que solo admite un tipo de contenido, y con frecuencia, tenemos que declarar el tipo de variable: entero, real, cadena… antes de proceder a la asignación de valor. En AutoLISP, por el contrario, no es necesario declarar el tipo de variable. Un símbolo aceptará cualquier tipo de valor que se le asigne, y posteriormente, incluso, podremos cambiar ese valor por otro, mediante una simple reasignación. Es decir, el tipo de dato es una propiedad del dato y no del símbolo. Esto, naturalmente, confiere flexibilidad a la hora de escribir el código; sin embargo, en contrapartida, obliga a ser más cuidadoso a la hora de seguir el rastro de las variables para evitar pasar a una función un dato de tipo erróneo.

En AutoLISP, para asignar valor a un símbolo se usa la función “setq”. Así, por ejemplo, podemos asociar a la variable “galicia” el contenido de la lista (A-Coruña Lugo Ourense Pontevedra) si escribimos en la ventana de comandos de AutoCAD:

Comando: (setq galicia ‘(A-Coruña Lugo Ourense Pontevedra)) 
(A-CORUÑA LUGO OURENSE PONTEVEDRA)


Acuérdate de escribir un apóstrofe (signo de no evaluación) antes de la lista. En caso contrario AutoLISP interpretaría la lista como una función y devolvería error.

domingo, 18 de enero de 2015

Símbolos autoevaluados, símbolos sin evaluar, evaluación de un símbolo

Decíamos ayer (eso lo tomo prestado de fray Luis de León) que no escribierais una lista en la línea de comandos de AutoCAD, como hicimos con el entero y repetido con la cadena, que no funcionaría. ¿Por qué? Pues ahí va la explicación:

Dejadme aclarar primero que esta afirmación no es totalmente cierta. A veces funciona, sí, pero solo si la lista es una función válida de AutoLISP; con cualquier otra lista el intento fracasará. Cuando el evaluador de AutoLISP encuentra una lista examina su primer símbolo, si se trata de una función conocida la ejecuta, en caso contrario devuelve error. Es decir, para AutoLISP, en principio, una lista es una función y no un dato. Quedémonos de momento con la idea de que a menos que se trate de una lista sin evaluar, su primer término debe ser un nombre de función válido.

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.