Builtin predicates - Type testing
Predicates in this group take a term as an argument and succeed if the term has a certain type (atom, variable, integer, object, etc).
atom/1, atomic/1, class/1, class/2, compound/1, database/1, float/1, integer/1, nonvar/1, number/1, object/1, object/2, predicate/1, predicate/2, string/1, var/1
  atom/1 - tests if a term is an atom.
- Usage
 - atom(Term)
 
- Description
 - If Term is an atom, then atom(Term) succeeds. Fails otherwise.
 
- Examples
  atom(fred)           succeeds
 atom([])             succeeds
 atom(f(X))           fails
 atom(1.5)            fails
 atom("mary")         fails
- Compatibility
 - Standard Prolog
 
- See Also
 - atomic/1, compound/1, float/1, integer/1, number/1, string/1, var/1
 
  atomic/1 - tests if a term is atomic.
- Usage
 - atomic(Term)
 
- Description
 - If Term is an atom, integer, floating-point number, or string, then atomic(Term) succeeds. Fails otherwise.
 
- Examples
  atomic(fred)         succeeds
 atomic([])           succeeds
 atomic(f(X))         fails
 atomic(1.5)          succeeds
 atomic("mary")       succeeds
- Compatibility
 - Standard Prolog, with the addition that strings are also considered atomic.
 
- See Also
 - atom/1, float/1, integer/1, number/1, string/1, var/1
 
  class/1 - tests if a term is a class object or name.
- Usage
 - class(Term)
 
- Description
 - If Term is a class object or an atom that names a class, then class(Term) succeeds. Fails otherwise.
 
- Examples
  class person { ... }
 new person (P)
 class(person)        succeeds
 class(people)        fails (assuming 'people' is not a class)
 class(1.5)           fails
 class(f(X))          fails
 class(P)             fails
 class(P.prototype)   succeeds (P's prototype is the person class)
 class("person")      fails
- See Also
 - class/2, object/1, predicate/1
 
  class/2 - tests if a class name is associated with a specific class object.
- Usage
 - class(Name, Class)
 
- Description
 - If Name is an atom that names a class, then Class is unified with the class object corresponding to Name. Otherwise, if Class is a class object, then Name is unified with the name of Class. Fails in all other cases.
 
- This predicate is typically used to retrieve the class object for a specific class name. The name of a class object can also be retrieved with 
Class.className. 
- Examples
  class person { ... }
 new person (P)
 class(person, C)         succeeds
 class(people, C)         fails
 class(1.5, C)            fails
 class(P, C)              fails
 class(P.className, C)    succeeds
 class(Name, P.prototype) succeeds
- See Also
 - class/1, object/1, predicate/1
 
  compound/1 - tests if a term is a compound functor or list.
- Usage
 - compound(Term)
 
- Description
 - If Term is a compound functor or list term, then compound(Term) succeeds. Fails otherwise. Lists are considered functors with the name "./2".
 
- Examples
  compound(fred)       fails
 compound([])         fails
 compound(f(X))       succeeds
 compound([a])        succeeds
 compound(1.5)        fails
 compound("mary")     fails
- Compatibility
 - Standard Prolog
 
- See Also
 - atom/1, var/1
 
  database/1 - tests if a term is a local predicate database.
- Usage
 - database(Term)
 
- Description
 - If Term is a local predicate database, then database(Term) succeeds. Fails otherwise.
 
- Examples
  new_database(DB); database(DB)       succeeds
- See Also
 - new_database/1
 
  float/1 - tests if a term is a floating-point number.
- Usage
 - float(Term)
 
- Description
 - If Term is a floating-point number, then float(Term) succeeds. Fails otherwise.
 
- Examples
  float(fred)          fails
 float(f(X))          fails
 float(1.5)           succeeds
 float(2)             fails
 float("mary")        fails
- Compatibility
 - Standard Prolog
 
- See Also
 - atom/1, integer/1, number/1, var/1
 
  integer/1 - tests if a term is an integer number.
- Usage
 - integer(Term)
 
- Description
 - If Term is an integer number, then integer(Term) succeeds. Fails otherwise.
 
- Examples
  integer(fred)        fails
 integer(f(X))        fails
 integer(1.5)         fails
 integer(2)           succeeds
 integer("mary")      fails
- Compatibility
 - Standard Prolog
 
- See Also
 - atom/1, float/1, number/1, var/1
 
  nonvar/1 - tests if a term is not an unbound variable.
- Usage
 - nonvar(Term)
 
- Description
 - If Term is an unbound variable, then nonvar(Term) fails. Otherwise nonvar(Term) succeeds with no modification to Term.
 
- Examples
  nonvar(X)            fails if X is unbound
 nonvar(fred)         succeeds
 nonvar(f(X))         succeeds
 nonvar(1.5)          succeeds
 nonvar("mary")       succeeds
- Compatibility
 - Standard Prolog
 
- See Also
 - atom/1, compound/1, var/1
 
  number/1 - tests if a term is an integer or floating-point number.
- Usage
 - number(Term)
 
- Description
 - If Term is an integer or floating-point number, then number(Term) succeeds. Fails otherwise.
 
- Examples
  number(fred)         fails
 number(f(X))         fails
 number(1.5)          succeeds
 number(2)            succeeds
 number("mary")       fails
- Compatibility
 - Standard Prolog
 
- See Also
 - atom/1, float/1, integer/1, var/1
 
  object/1 - tests if a term is an instance object.
- Usage
 - object(Term)
 
- Description
 - If Term is an instance object, then object(Term) succeeds. Fails otherwise.
 
- Examples
  class person { ... }
 new person (P)
 object(P)            succeeds
 object(person)       fails
 object(1.5)          fails
 object(f(X))         fails
 object(P.prototype)  fails (P's prototype is the person class)
 object("person")     fails
- See Also
 - class/1, object/2, predicate/1
 
  object/2 - tests if a term is an object that is an instance of a specific class.
- Usage
 - object(Term, Class)
 
- Description
 - If Term is an object that is an instance of Class or one of its subclasses, then object(Term, Class) succeeds. Fails otherwise. The Class may be a class object or an atom that names a class.
 
- Examples
  class person { ... }
 new person (P)
 object(P, person)            succeeds
 object(P, people)            fails
 object(P, P)                 fails
 object(1.5, person)          fails
 object(f(X), person)         fails
 object(P, 1.5)               fails
 object(P.prototype, person)  fails
 object(P, "person")          fails
- See Also
 - class/1, object/1, predicate/1
 
  predicate/1 - tests if a term is a predicate.
- Usage
 - predicate(Term)
 
- Description
 - If Term is a predicate, then succeeds. Fails otherwise.
 
- Examples
  foo(X, Y) { ... }
 predicate(P, foo/2);
 predicate(P)             succeeds
 predicate(a)             fails
 predicate(X)             fails
 predicate(foo(X, Y))     fails
 predicate(foo/2)         fails
 predicate(1.5)           fails
- See Also
 - class/1, object/1, predicate/2
 
  predicate/2 - tests if a term is a predicate with a specific name.
- Usage
 - predicate(Term, Pred)
 
- Description
 - If Term is a predicate, then Pred is unified with its predicate indicator. The indicator will have the form Name / Arity. 
 
- If Term is a variable and Pred has the form Name / Arity, then Term is unified with the predicate corresponding to Pred. Fails if Pred does not exist.
 
- Errors
 
instantiation_error - Term is a variable and one of Pred, Name, or Arity, is also a variable.  
type_error(predicate_indicator, Pred) - Term is a variable and Pred does not have the form Name / Arity.  
type_error(integer, Arity) - Term is a variable and Arity is not an integer.  
type_error(atom, Name) - Term is a variable and Name is not an atom.  
domain_error(not_less_than_zero, Arity) - Term is a variable and Arity is less than zero. 
- Examples
  foo(X, Y) { ... }
 predicate(Term, foo/2)
      succeeds with Term set to the predicate foo/2
 predicate(Term, Pred)
      succeeds with Pred = foo/2 if Term is the predicate foo/2
 predicate(Term2, person::age/1)
      sets Term2 to the method age/1 within the person class.
      Note: the single argument is the "Self" pointer.
- See Also
 - class/1, object/1, predicate/1
 
  string/1 - tests if a term is a string.
- Usage
 - string(Term)
 
- Description
 - If Term is a string, string(Term) succeeds. Fails otherwise.
 
- Examples
  string(fred)         fails
 string(f(X))         fails
 string(1.5)          fails
 string(2)            fails
 string("mary")       succeeds
- See Also
 - atom/1, compound/1, var/1
 
  var/1 - tests if a term is an unbound variable.
- Usage
 - var(Term)
 
- Description
 - If Term is an unbound variable, then var(Term) succeeds with no modification to Term. Fails otherwise.
 
- Examples
  var(X)               succeeds if X is unbound
 var(fred)            fails
 var(f(X))            fails
 var(1.5)             fails
 var("mary")          fails
- Compatibility
 - Standard Prolog
 
- See Also
 - atom/1, compound/1, nonvar/1