GNU Info

Info Node: (emacs-lisp-intro.info)else

(emacs-lisp-intro.info)else


Next: Truth & Falsehood Prev: if Up: Writing Defuns
Enter node , (file) or (file)node

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 "5 is greater than 4!")    ; 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.  Note:
GNU Emacs Helps You Type 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 symbol `fierce',
     then warn of a tiger;
     else say it's not fierce."
       (if (equal characteristic 'fierce)
           (message "It's a tiger!")
         (message "It's not fierce!")))



     (type-of-animal 'fierce)
     
     (type-of-animal 'zebra)

When you evaluate `(type-of-animal 'fierce)', you will see the
following message printed in the echo area: `"It's a tiger!"'; but when
you evaluate `(type-of-animal 'zebra)', you will see `"It's not
fierce!"'.

   (Of course, if the CHARACTERISTIC were `ferocious', the message
`"It's 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.)


automatically generated by info2www version 1.2.2.9