GNU Info

Info Node: (emacs-lisp-intro.info)type-of-animal in detail

(emacs-lisp-intro.info)type-of-animal in detail


Prev: if in more detail Up: if
Enter node , (file) or (file)node

The `type-of-animal' Function in Detail
---------------------------------------

   Let's look at the `type-of-animal' function in detail.

   The function definition for `type-of-animal' was written by filling
the slots of two templates, one for a function definition as a whole,
and a second for an `if' expression.

   The template for every function that is not interactive is:

     (defun NAME-OF-FUNCTION (ARGUMENT-LIST)
       "DOCUMENTATION..."
       BODY...)

   The parts of the function that match this template look like this:

     (defun type-of-animal (characteristic)
       "Print message in echo area depending on CHARACTERISTIC.
     If the CHARACTERISTIC is the symbol `fierce',
     then warn of a tiger."
       BODY: THE `if' EXPRESSION)

   The name of function is `type-of-animal'; it is passed the value of
one argument.  The argument list is followed by a multi-line
documentation string.  The documentation string is included in the
example because it is a good habit to write documentation string for
every function definition.  The body of the function definition
consists of the `if' expression.

   The template for an `if' expression looks like this:

     (if TRUE-OR-FALSE-TEST
         ACTION-TO-CARRY-OUT-IF-THE-TEST-RETURNS-TRUE)

   In the `type-of-animal' function, the code for the `if' looks like
this:

     (if (equal characteristic 'fierce)
         (message "It's a tiger!")))

   Here, the true-or-false-test is the expression:

     (equal characteristic 'fierce)

In Lisp, `equal' is a function that determines whether its first
argument is equal to its second argument.  The second argument is the
quoted symbol `'fierce' and the first argument is the value of the
symbol `characteristic'--in other words, the argument passed to this
function.

   In the first exercise of `type-of-animal', the argument `fierce' is
passed to `type-of-animal'.  Since `fierce' is equal to `fierce', the
expression, `(equal characteristic 'fierce)', returns a value of true.
When this happens, the `if' evaluates the second argument or then-part
of the `if': `(message "It's tiger!")'.

   On the other hand, in the second exercise of `type-of-animal', the
argument `zebra' is passed to `type-of-animal'.  `zebra' is not equal
to `fierce', so the then-part is not evaluated and `nil' is returned by
the `if' expression.


automatically generated by info2www version 1.2.2.9