eintr: Using set

 
 1.9.1 Using ‘set’
 -----------------
 
 To set the value of the symbol ‘flowers’ to the list ‘'(rose violet
 daisy buttercup)’, evaluate the following expression by positioning the
 cursor after the expression and typing ‘C-x C-e’.
 
      (set 'flowers '(rose violet daisy buttercup))
 
 The list ‘(rose violet daisy buttercup)’ will appear in the echo area.
 This is what is _returned_ by the ‘set’ function.  As a side effect, the
 symbol ‘flowers’ is bound to the list; that is, the symbol ‘flowers’,
 which can be viewed as a variable, is given the list as its value.
 (This process, by the way, illustrates how a side effect to the Lisp
 interpreter, setting the value, can be the primary effect that we humans
 are interested in.  This is because every Lisp function must return a
 value if it does not get an error, but it will only have a side effect
 if it is designed to have one.)
 
    After evaluating the ‘set’ expression, you can evaluate the symbol
 ‘flowers’ and it will return the value you just set.  Here is the
 symbol.  Place your cursor after it and type ‘C-x C-e’.
 
      flowers
 
 When you evaluate ‘flowers’, the list ‘(rose violet daisy buttercup)’
 appears in the echo area.
 
    Incidentally, if you evaluate ‘'flowers’, the variable with a quote
 in front of it, what you will see in the echo area is the symbol itself,
 ‘flowers’.  Here is the quoted symbol, so you can try this:
 
      'flowers
 
    Note also, that when you use ‘set’, you need to quote both arguments
 to ‘set’, unless you want them evaluated.  Since we do not want either
 argument evaluated, neither the variable ‘flowers’ nor the list ‘(rose
 violet daisy buttercup)’, both are quoted.  (When you use ‘set’ without
 quoting its first argument, the first argument is evaluated before
 anything else is done.  If you did this and ‘flowers’ did not have a
 value already, you would get an error message that the ‘Symbol's value
 as variable is void’; on the other hand, if ‘flowers’ did return a value
 after it was evaluated, the ‘set’ would attempt to set the value that
 was returned.  There are situations where this is the right thing for
 the function to do; but such situations are rare.)