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.


Y, ¿qué es una lista sin evaluar?

Sabed que existen algunos símbolos que el evaluador de AutoLISP no necesita traducir, simplemente los devuelve tal cual los hemos introducido. A esta clase de símbolos pertenecen los números, las cadenas y algunas variables constantes –terrible oxímoron- como el número Pi. Son lo que podemos llamar símbolos autoevaluados. 

Si escribimos estos símbolos en la ventana de comandos de AutoCAD, precedidos del consabido cierre de exclamación, AutoCAD simplemente los devuelve:

Comando: !1
1

Comando: !”hola”
“hola”



Comando: !Pi
3.14159



El resto de los símbolos pueden tener o no un valor asociado, dependiendo de si hemos ligado o no a ellos un valor, local o globalmente.

La evaluación de un símbolo que tenga un valor asociado proporciona su valor, y en todo momento podemos pedir a AutoLISP que nos devuelva el valor asignado a ese símbolo. Así, evaluar un símbolo es decirle a AutoLISP que lo examine y devuelva su valor.

Cuando le pedimos a AutoLISP la evaluación de un símbolo que no tiene un valor asignado, AutoLISP devuelve “nil”, es decir, nada. Así, si a la variable “mivar” no se le ha asignado ningún valor, AutoLISP devolverá “nil” cuando se le requiera su valor:

Comando: !mivar
nil




Por el contrario, si la variable “a” se ha ligado al valor de la lista (1 2 3), AutoLISP devolverá esta lista cada vez que le preguntemos por el valor del símbolo.

Comando: !a
(1 2 3)



Un símbolo sin evaluar es simplemente el símbolo en sí mismo. Cuando pedimos a AutoLISP que nos devuelva un símbolo sin evaluar lo que obtenemos es el nombre del símbolo. Se puede obtener un símbolo o una expresión sin evaluar colocando un apóstrofe (') precediendo a la expresión.

Comando: !'a
A



El mismo resultado se puede obtener mediante la función “quote”. Si escribimos en la ventana de comandos (quote a), como muestra el ejemplo, obtenemos:

Comando: (quote a)
A



Observemos que el evaluador de AutoLISP convierte los nombres a sus equivalentes en mayúsculas, por lo que los símbolos “a” y “A” tienen asociado el mismo contenido, o lo que es lo mismo, son el mismo nombre.

También podemos observar que cuando la expresión en la ventana de comandos comienza por un paréntesis no es necesario advertir a AutoCAD, mediante el signo de cierre de exclamación, que lo que sigue es una expresión de AutoLISP.

La diferencia entre el símbolo sin evaluar y el valor del símbolo se entiende bien pensando en el primero como el continente y en el segundo como el contenido. El símbolo es el portador del valor, el elemento de identificación de un valor dado. De alguna forma, la relación entre símbolo y valor, es la misma que entre nombre y objeto: el nombre designa al objeto, pero no es el objeto.

Pues, al igual que los símbolos, las listas también pueden ser objetos sin evaluar, para ello es necesario que vayan precedidas del símbolo de no evaluación, apóstrofe (‘) o la palabra “quote” -algo así como si le dijéramos a AutoLISP, toma esta caja pero no mires qué hay dentro-. Y veremos que esta característica es muy importante en AutoLISP, pues la lista sin evaluar nos permitirá almacenar y trasmitir toda clase de datos e incluso funciones.


La otra clase de listas que existen en AutoLISP son las listas estándar, o simplemente, listas, de las que ya hemos hablado en el artículo anterior.

3 comentarios:

  1. He leído tu último post y no me ha quedado claro lo siguiente: las cadenas, como expresiones de AutoLISP, ¿pueden ir entre paréntesis?

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. Hola, anónimo. Las cadenas son expresiones encerradas entre comillas y que pueden contener espacios en blanco, pero siempre, siempre, van entre comillas. Ahora bien, un conjunto de cadenas puede formar una lista. En ese caso, cada cadena es un elemento de la lista, y el conjunto de todas ellas va entre paréntesis. Por ejemplo, una lista con nombres de clientes podría escribirse así:

      (“Pero Sancho” “Paulo Church” “Marino Rajo” “Wilfredo Pérez” “Arturo Máximo” “José Asnar”)

      Espero que te sirva.

      Eliminar