User Tools

Site Tools


ch2_3_predic

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
ch2_3_predic.txt · Last modified: 2022/03/30 04:28 by admin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki