eintr: Prevent confusion

 
 ‘let’ Prevents Confusion
 ------------------------
 
 The ‘let’ special form prevents confusion.  ‘let’ creates a name for a
 “local variable” that overshadows any use of the same name outside the
 ‘let’ expression.  This is like understanding that whenever your host
 refers to “the house”, he means his house, not yours.  (Symbols used in
 argument lists work the same way.  SeeThe ‘defun’ Macro defun.)
 
    Local variables created by a ‘let’ expression retain their value
 _only_ within the ‘let’ expression itself (and within expressions called
 within the ‘let’ expression); the local variables have no effect outside
 the ‘let’ expression.
 
    Another way to think about ‘let’ is that it is like a ‘setq’ that is
 temporary and local.  The values set by ‘let’ are automatically undone
 when the ‘let’ is finished.  The setting only affects expressions that
 are inside the bounds of the ‘let’ expression.  In computer science
 jargon, we would say the binding of a symbol is visible only in
 functions called in the ‘let’ form; in Emacs Lisp, scoping is dynamic,
 not lexical.
 
    ‘let’ can create more than one variable at once.  Also, ‘let’ gives
 each variable it creates an initial value, either a value specified by
 you, or ‘nil’.  (In the jargon, this is binding the variable to the
 value.)  After ‘let’ has created and bound the variables, it executes
 the code in the body of the ‘let’, and returns the value of the last
 expression in the body, as the value of the whole ‘let’ expression.
 (“Execute” is a jargon term that means to evaluate a list; it comes from
 the use of the word meaning “to give practical effect to” (‘Oxford
 English Dictionary’).  Since you evaluate an expression to perform an
 action, “execute” has evolved as a synonym to “evaluate”.)