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.

Acabamos de asignar a la variable “galicia” una lista que contiene el nombre de las cuatro provincias gallegas. Durante toda la sesión de dibujo, y en tanto no se cierre el programa, o se reasigne a ésta otro valor, AutoLISP “recordará” el valor de la variable.

Observamos que las provincias que tienen nombres formados por dos palabras necesitan de un nexo de unión entre ellas que no sea un espacio en blanco, dado que éste es el elemento separador entre los símbolos o átomos de la lista. 

Repasando lo anteriormente aprendido, si requerimos de AutoLISP el valor de la variable “galicia” obtenemos la lista de las cuatro provincias:

Comando: !galicia
(A-CORUÑA LUGO OURENSE PONTEVEDRA)


 Si lo que requerimos es el valor del símbolo sin evaluar obtenemos el nombre de la lista:

Comando: (quote galicia)
GALICIA


O bien, alternativamente:

Comando: !’galicia
GALICIA


Advirtamos la diferencia entre asignar a un símbolo un valor, y un valor sin evaluar, bien mediante la función “quote”, bien precediéndolo de un apóstrofe. En el siguiente ejemplo al símbolo “las-cuatro” le asignaremos primero el valor de la variable “galicia” y posteriormente el símbolo sin evaluar “galicia”:

Comando: (setq las-cuatro galicia)
(A-CORUÑA LUGO OURENSE PONTEVEDRA)


Comando: (setq las-cuatro (quote galicia))
GALICIA


O bien:

Comando: (setq las-cuatro ‘galicia)
GALICIA


Cuando asignamos al símbolo un valor sin evaluar es posible forzar su evaluación posterior mediante la función de AutoLISP “eval”:

Comando: (eval las-cuatro)
(A-CORUÑA LUGO OURENSE PONTEVEDRA)


Si se me permite la analogía con un recipiente lleno, en el primer caso, la variable almacenaría solo el contenido y en el segundo, el recipiente y el contenido. El contenido estaría disponible mediante la función “eval”.

Veamos otro ejemplo: a la variable “caldo” le asignamos la lista (nabizas patatas tocino unto habas):

Comando: (setq caldo ‘(nabizas patatas tocino unto habas))
(NABIZAS PATATAS TOCINO UNTO HABAS)

Comando: !caldo
(NABIZAS PATATAS TOCINO UNTO HABAS)

Ahora, a la variable “receta1” le asignaremos sucesivamente la variable “caldo” y el símbolo sin evaluar “caldo” y observaremos las distintas respuestas de AutoLISP:

(setq receta1 caldo)
(NABIZAS PATATAS TOCINO UNTO HABAS)

(setq receta1 ‘caldo)
CALDO

Por último, solicitamos la evaluación de la variable “receta1” mediante la función “eval”:

Comando: (eval receta1)
(NABIZAS PATATAS TOCINO UNTO HABAS)

¡Creo que nunca hubierais creído que el caldo gallego tuviera algo que ver con AutoCAD!

No hay comentarios:

Publicar un comentario