eintr: else

 
 3.8 If–then–else Expressions
 ============================
 
 An ‘if’ expression may have an optional third argument, called the
 “else-part”, for the case when the true-or-false-test returns false.
 When this happens, the second argument or then-part of the overall ‘if’
 expression is _not_ evaluated, but the third or else-part _is_
 evaluated.  You might think of this as the cloudy day alternative for
 the decision “if it is warm and sunny, then go to the beach, else read a
 book!”.
 
    The word “else” is not written in the Lisp code; the else-part of an
 ‘if’ expression comes after the then-part.  In the written Lisp, the
 else-part is usually written to start on a line of its own and is
 indented less than the then-part:
 
      (if TRUE-OR-FALSE-TEST
          ACTION-TO-CARRY-OUT-IF-THE-TEST-RETURNS-TRUE
        ACTION-TO-CARRY-OUT-IF-THE-TEST-RETURNS-FALSE)
 
    For example, the following ‘if’ expression prints the message ‘4 is
 not greater than 5!’ when you evaluate it in the usual way:
 
      (if (> 4 5)                               ; if-part
          (message "4 falsely greater than 5!") ; then-part
        (message "4 is not greater than 5!"))   ; else-part
 
 Note that the different levels of indentation make it easy to
 distinguish the then-part from the else-part.  (GNU Emacs has several
 commands that automatically indent ‘if’ expressions correctly.  See
 GNU Emacs Helps You Type Lists Typing Lists.)
 
    We can extend the ‘type-of-animal’ function to include an else-part
 by simply incorporating an additional part to the ‘if’ expression.
 
    You can see the consequences of doing this if you evaluate the
 following version of the ‘type-of-animal’ function definition to install
 it and then evaluate the two subsequent expressions to pass different
 arguments to the function.
 
      (defun type-of-animal (characteristic)  ; Second version.
        "Print message in echo area depending on CHARACTERISTIC.
      If the CHARACTERISTIC is the string \"fierce\",
      then warn of a tiger; else say it is not fierce."
        (if (equal characteristic "fierce")
            (message "It is a tiger!")
          (message "It is not fierce!")))
 
      (type-of-animal "fierce")
 
      (type-of-animal "striped")
 
 
 When you evaluate ‘(type-of-animal "fierce")’, you will see the
 following message printed in the echo area: ‘"It is a tiger!"’; but when
 you evaluate ‘(type-of-animal "striped")’, you will see ‘"It is not
 fierce!"’.
 
    (Of course, if the CHARACTERISTIC were ‘"ferocious"’, the message
 ‘"It is not fierce!"’ would be printed; and it would be misleading!
 When you write code, you need to take into account the possibility that
 some such argument will be tested by the ‘if’ and write your program
 accordingly.)