Existen dos formas de setear una variable en Lisp:
Usando set
Imaginemos que queremos setear una variable que contenga una lista de lenguajes de programación. Podemos hacerlo de la siguiente manera:
(set 'lenguajes '(c python pascal php java erlang))
Esto setería una variable llamada lenguajes que contendría la lista '(c python pascal php java erlang)
Debemos fijarnos en un par de cosas, una de ellas ya la había explicado en el post anterior.
Si nos fijamos en la lista
'(c python pascal php java erlang)
podemos ver que la lista comienza con una comilla. Con esto lo que le estamos diciendo al intérprete es que la debe devolver tal y como está, sin evaluar nada.
Por otro lado vemos que hay una comilla simple delante del nombre de la variable. Esto es mas o menos lo mismo, no queremos que la evalúe, solo queremos pasar el elemento a la función set. Si no pusiésemos esa comilla el interprete devolvería un error al tratar de evaluarla.
De esta forma ya tenemos una variable lenguajes que al evaluarla fuera de paréntesis nos devolvería una lista de lenguajes de programación.
Usando setq
Setq es una forma un poco mas sencilla de crear una variable, aunque tampoco mucho mas, ya que lo que nos ayuda setq es en que no tenemos que poner la comilla en la variable que queremos crear. La creación de la variable anterior con setq sería de la siguiente manera:
(setq lenguajes '(c python pascal php java erlang))
La q de setq es de quoted.
Creando un contador sencillo.
Si usamos set o setq de nuevo sobre una variable que ya tiene un valor asignado este se sobrescribe, así que podemos ver un sencillo ejemplo de esto viendo como podemos definir una variable contador en emacs.
(setq counter 0) ; inicializador
(setq counter (+ counter 1)) ; incrementador
counter ; resultado
El "inicializador" lo que hace como su nombre indica es crear la variable y setearla a 0. Inicializarla. El incrementador incrementa el valor de la variable en 1, así que cada vez que ejecutemos la expresión del incrementador el valor de la variable counter se aumentará en 1.