Dynamique et Lexicales variables en Common Lisp

Je suis en train de lire le livre "Pratique Common Lisp" par Peter Seibel.

Dans le Chapitre 6, "Variables" sections
"Lexicale des Variables et des Fermetures" et "Dynamique, une.k.un. Spécial, Les Variables".
http://www.gigamonkeys.com/book/variables.html

Mon problème est que les exemples dans les deux articles montrent comment (passons ...) peuvent ombre des variables globales et ne veut pas vraiment dire la différence entre la Dynamique et Lexicales vars.

Je comprends comment les fermetures de travail, mais je n'ai pas vraiment d'obtenir ce qui est si spécial au sujet de la laisser dans cet exemple:

(defvar *x* 10)

(defun foo ()
  (format t "Before assignment~18tX: ~d~%" *x*)
  (setf *x* (+ 1 *x*))
  (format t "After assignment~18tX: ~d~%" *x*))


(defun bar ()
  (foo)
  (let ((*x* 20)) (foo))
  (foo))


CL-USER> (foo)
Before assignment X: 10
After assignment  X: 11
NIL


CL-USER> (bar)
Before assignment X: 11
After assignment  X: 12
Before assignment X: 20
After assignment  X: 21
Before assignment X: 12
After assignment  X: 13
NIL

Je me sens comme il n'y a rien de spécial qui se passe ici. L'extérieur foo dans bar incrémente le mondial x, et foo entouré par laisser dans bar incréments l'ombre x. Quel est le big deal? Je ne vois pas comment est-ce censé expliquer la différence entre le lexique et dynamique de vars. Cependant, le livre continue comme ça:

Alors, comment cela fonctionne? Comment ne LAISSEZ
sais que quand il se lie x c'est
censé créer une liaison dynamique
plutôt normal qu'un lexicale de liaison?
Il le sait parce que le nom a été
déclaré spécial.12 Le nom de chaque
variable définie avec DEFVAR et
DEFPARAMETER est automatiquement déclarée
à l'échelle mondiale spécial.

Ce qui devrait arriver si laisser lier x à l'aide de "normal lexicale de liaison"? Dans l'ensemble, quelles sont les différences entre dynamique et lexicales de liaison et comment est-ce l'exemple de spécial au sujet de liaison dynamique?

InformationsquelleAutor George | 2009-01-20