One thing that Common Lisp has which is very powerfull is its dynamic variables. The following code ilustrates the concept:
CL-USER(124): (defvar *x* "Hello") ; *x* is a dynamic variable*X* CL-USER(125): (progn (let ((*x* "Ola")) ; establishes a dynamic environment for *x* (format t "~a~%" *x*) (setf *x* "Ciao") (format t "~a~%" *x*)) ; end of the dynamic environment (format t "~a~%" *x*)) ; back to the initial dynamic environment ; *x* assumes its original binding Ola Ciao Hello NIL CL-USER(126):
Now if this is used with multiple processing and/or closures you get very powerful ways to separate things and a great amount of flexibility almost for nothing.