Common Lisp the Language, 2nd Edition
Next: Logical Values
Up: Common Lisp the Language
Previous: Control of Time
A predicate is a function that tests for some condition
involving its arguments and returns nil
if the condition is
false, or some non-nil
value if the condition is true. One
may think of a predicate as producing a Boolean value, where
nil
stands for false and anything else stands for
true. Conditional control structures such as cond
,
if
, when
, and unless
test such
Boolean values. We say that a predicate is true when it returns
a non-nil
value, and is false when it returns
nil
; that is, it is true or false according to whether the
condition being tested is true or false.
By convention, the names of predicates usually end in the letter
p
(which stands for ``predicate’‘). Common Lisp uses a
uniform convention in hyphenating names of predicates. If the name of
the predicate is formed by adding a p
to an existing name,
such as the name of a data type, a hyphen is placed before the final
p
if and only if there is a hyphen in the existing name.
For example, number
begets numberp
but
standard-char
begets standard-char-p
. On the
other hand, if the name of a predicate is formed by adding a prefixing
qualifier to the front of an existing predicate name, the two names are
joined with a hyphen and the presence or absence of a hyphen before the
final p
is not changed. For example, the predicate
string-lessp
has no hyphen before the p
because it is the string version of lessp
(a MacLisp
function that has been renamed <
in Common Lisp). The
name string-less-p
would incorrectly imply that it is a
predicate that tests for a kind of object called a
string-less
, and the name stringlessp
would
connote a predicate that tests whether something has no strings (is
``stringless’’)!
The control structures that test Boolean values only test for whether
or not the value is nil
, which is considered to be false.
Any other value is considered to be true. Often a predicate will return
nil
if it ``fails’’ and some useful value if it
``succeeds’’; such a function can be used not only as a test but also
for the useful value provided in case of success. An example is
member
.
If no better non-nil
value is available for the purpose
of indicating success, by convention the symbol t
is used
as the ``standard’’ true value.
Next: Logical Values
Up: Common Lisp the Language
Previous: Control of Time
AI.Repository@cs.cmu.edu