**//Predicates//** Simple functions that return ''T'' or ''NIL''. They have no side effects. ''EQ'' Tests if to arguments are the same symbol, accepts only symbols or ''NIL''. >(eq 'pi 'user::pi) T >(eq 'nil ()) ; NIL, 'NIL, () and '() are all EQ T ''EQUAL'' Tests if two things are the same, is case and type senstive. >(equal "aa" "AA") NIL >(equal 1 1.0) ; different type NIL ''NOT'' Logical not. Accepts single argument. >(not 13) NIL >(not '()) T ''ATOM'' Tests if the argument is an atom. >(atom 13) T >(atom nil) ; NIL is an atom (and list) T >(atom '()) ; this is still NIL T >(atom '(a b)) ; this is list NIL ''CONSP'' Tests if the argument is a cons cell. >(consp '()) ; NIL is not cons NIL >(consp '(a b)) T ''LISTP'' Tests if the argument is a list, that means cons-cell or nil. >(listp nil) ; NIL is a list (and atom) T >(listp '(a b)) T >(listp (cons 'a 'b)) ; this is conscell with B in cdr, improper list T ''PROPER-LIST-P'' Tests if the argument is a proper list. Proper list means list ending with ''NIL'' in the cdr of the last cons cell. Improper list might be dotted, or even cyclic. >(proper-list-p (cons 'a 'b)) ; this is conscell with B in cdr, improper list NIL ''SYMBOLP'' Tests if the argument is a symbol. All versions of NIL are symbol. >(symbolp 'a) ; symbol A T >(symbolp 13) NIL >(symbolp nil) ; symbol NIL T ''STRINGP'' Tests if the argument is a string. >(stringp "hello") T >(stringp 'hello) NIL ''NUMBERP'' Tests if the argument is a number (integer or float). >(numberp pi) T >(numberp (/ 10 5)) T >(numberp (/ 10 0)) ;Division by zero. NIL ''INTEGERP'' Tests if the argument is a integer number. >(integerp (/ 10 5)) ; integer division T >(integerp (/ 10 5.0)) ; poisoned by float 5.0 NIL ''ZEROP'' Tests if the argument is number zero. >(zerop (- 10 10)) T >(zerop nil) ;Applying ZEROP on non-numeric data type! NIL ''ODDP'' Tests if the argument is an odd integer. >(oddp 3) T >(oddp 3.0) ;Applying ODDP on non-integral number! NIL ''EVENP'' Tests if the argument is an even integer. >(evenp 2) T >(evenp 0) T ''FUNCTIONP'' Tests if the argument is a function object. >(functionp #'+) T ''PACKAGEP'' Tests if the argument is a package object. >(packagep *package*) T ''BOUNDP'' Expects symbol as argument. Tests if the symbol has value binding. >(boundp 'pi) T ''FBOUNDP'' Expects symbol as argument. Tests if the symbol has function or macro binding. >(fboundp '+) T >(fboundp 'if) ; also works for special forms T ''SPECIAL-OPERATOR-P'' Expects symbol as argument. Tests if the symbol represents special operator. >(special-operator-p '+) ; ordinary function NIL >(special-operator-p 'if) ; special operator IF T