eintr: type-of-animal in detail

 
 3.7.1 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 string \"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 is 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
 string ‘"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 is a tiger!")’.
 
    On the other hand, in the second exercise of ‘type-of-animal’, the
 argument ‘"striped"’ is passed to ‘type-of-animal’.  ‘"striped"’ is not
 equal to ‘"fierce"’, so the then-part is not evaluated and ‘nil’ is
 returned by the ‘if’ expression.