2010-04-18 8 views
5

¿Cuál es (en términos simples) la diferencia entre establecer un enlace (LET) y símbolos (= variables) en el ceceo común?common-lisp: diferencia entre el enlace y el símbolo

+0

¿Qué quiere decir con "... y símbolos (= variables)"? ¿Puede darnos ejemplos de expresiones para los dos conceptos que está describiendo? –

Respuesta

6

Los símbolos y las variables son dos tipos muy diferentes de entidades. El símbolo es un nombre de algo; variable es un contenedor para un valor. La variable se puede nombrar por un símbolo.

Encuadernación es una asociación entre un símbolo y una variable; cuando el enlace está en efecto, puede referirse a una variable por su nombre. let formulario crea tal enlace.

+0

Lo siento si no fui lo suficientemente claro. yo estaba buscando en este tutorial: http://en.wikibooks.org/wiki/Common_Lisp/First_steps/Beginner_tutorial ¿Cuál es la diferencia entre: (let ((A1))) y (setf un 1) – martins

+1

(let ((a 1)) ...) crea una variable (con alcance léxico local), un enlace entre el símbolo A y esta variable (en el contexto léxico dentro de "let" for) y lo inicializa en 1. (setf a 1) puede comportarse de manera diferente: si hay un enlace A, entonces cambia su valor. Si no hay ningún enlace, crea un enlace global A y lo inicializa en 1. Sin embargo, el tipo de enlace global se deja sin especificar y difiere entre las implementaciones de Lisp (y sus versiones). Entonces, si tiene una variable llamada A, setf cambiará su valor; de lo contrario, el resultado no está completamente especificado. –

1

(let ((a 1))) establece el valor de a a 1 hasta el punto donde se alcanza el corchete de cierre que coincide con el corchete de apertura antes del let, momento en el que vuelve al valor anterior (o se vuelve indefinido). A menudo se ve una entrada en el cuerpo de una función en la que se requieren variables locales que deben salir del alcance al final de la función, por lo que se debe usar un let there.

(setf a 1) establece a en 1 y asume que ya se ha definido previamente (ya sea por defparametro, defvariable o let) o que a es una nueva variable especial que necesita un valor.

Es un poco más complicado que eso, pero no estoy seguro de tener los ceceos para explicarlo.

Cuestiones relacionadas