eintr: if in more detail
‘if’ in more detail
-------------------
An ‘if’ expression written in Lisp does not use the word “then”; the
test and the action are the second and third elements of the list whose
first element is ‘if’. Nonetheless, the test part of an ‘if’ expression
is often called the “if-part” and the second argument is often called
the “then-part”.
Also, when an ‘if’ expression is written, the true-or-false-test is
usually written on the same line as the symbol ‘if’, but the action to
carry out if the test is true, the then-part, is written on the second
and subsequent lines. This makes the ‘if’ expression easier to read.
(if TRUE-OR-FALSE-TEST
ACTION-TO-CARRY-OUT-IF-TEST-IS-TRUE)
The true-or-false-test will be an expression that is evaluated by the
Lisp interpreter.
Here is an example that you can evaluate in the usual manner. The
test is whether the number 5 is greater than the number 4. Since it is,
the message ‘5 is greater than 4!’ will be printed.
(if (> 5 4) ; if-part
(message "5 is greater than 4!")) ; then-part
(The function ‘>’ tests whether its first argument is greater than its
second argument and returns true if it is.)
Of course, in actual use, the test in an ‘if’ expression will not be
fixed for all time as it is by the expression ‘(> 5 4)’. Instead, at
least one of the variables used in the test will be bound to a value
that is not known ahead of time. (If the value were known ahead of
time, we would not need to run the test!)
For example, the value may be bound to an argument of a function
definition. In the following function definition, the character of the
animal is a value that is passed to the function. If the value bound to
‘characteristic’ is ‘"fierce"’, then the message, ‘It is a tiger!’ will
be printed; otherwise, ‘nil’ will be returned.
(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."
(if (equal characteristic "fierce")
(message "It is a tiger!")))
If you are reading this inside of GNU Emacs, you can evaluate the
function definition in the usual way to install it in Emacs, and then
you can evaluate the following two expressions to see the results:
(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!"’; and when
you evaluate ‘(type-of-animal "striped")’ you will see ‘nil’ printed in
the echo area.