Author(s): Daniel Cabeza, Manuel Hermenegildo.
Version: 1.7#208 (2002/4/23, 19:9:14 CEST)
Version of last change: 1.7#204 (2002/4/22, 18:42:18 CEST)
This library contains the set of basic properties used by the builtin predicates, and which constitute the basic data types and properties of the language. They can be used both as type testing builtins within programs (by calling them explicitly) and as properties in assertions.
basic_props
)member/2
,
compat/2
,
iso/1
,
not_further_inst/2
,
regtype/1
.
term/1
,
int/1
,
nnegint/1
,
flt/1
,
num/1
,
atm/1
,
struct/1
,
gnd/1
,
constant/1
,
callable/1
,
operator_specifier/1
,
list/1
,
list/2
,
sequence/2
,
sequence_or_list/2
,
character_code/1
,
string/1
,
predname/1
,
atm_or_atm_list/1
.
basic_props
)The most general type (includes all possible terms).
Usage 1: term(X)
X
is any term.
Usage 2: term(X)
X
is any term.
The type of integers. The range of integers is [-2^2147483616, 2^2147483616)
. Thus for all practical purposes, the range of integers can be considered infinite.
Usage 1: int(T)
T
is an integer.
Usage 2: int(T)
T
is an integer.
The type of non-negative integers, i.e., natural numbers.
Usage 1: nnegint(T)
T
is a non-negative integer.
Usage 2: nnegint(T)
T
is a non-negative integer.
The type of floating-point numbers. The range of floats is the one provided by the C double
type, typically [4.9e-324, 1.8e+308]
(plus or minus). There are also three special values: Infinity, either positive or negative, represented as 1.0e1000
and -1.0e1000
; and Not-a-number, which arises as the result of indeterminate operations, represented as 0.Nan
Usage 1: flt(T)
T
is a float.
Usage 2: flt(T)
T
is a float.
The type of numbers, that is, integer or floating-point.
Usage 1: num(T)
T
is a number.
Usage 2: num(T)
T
is a number.
The type of atoms, or non-numeric constants. The size of atoms is unbound.
Usage 1: atm(T)
T
is an atom.
Usage 2: atm(T)
T
is an atom.
The type of compound terms, or terms with non-zeroary functors. By now there is a limit of 255 arguments.
Usage 1: struct(T)
T
is a compound term.
Usage 2: struct(T)
T
is a compound term.
The type of all terms without variables.
Usage 1: gnd(T)
T
is ground.
Usage 2: gnd(T)
T
is ground.
Usage 1: constant(T)
T
is an atomic term (an atom or a number).
Usage 2: constant(T)
T
is an atomic term (an atom or a number).
Usage 1: callable(T)
T
is a term which represents a goal, i.e., an atom or a structure.
Usage 2: callable(T)
T
is a term which represents a goal, i.e., an atom or a structure.
The type and associativity of an operator is described by the following mnemonic atoms:
xfx
xfy
yfx
fx
fy
xf
yf
Usage 1: operator_specifier(X)
X
specifies the type and associativity of an operator.
Usage 2: operator_specifier(X)
X
specifies the type and associativity of an operator.
A list is formed with successive applications of the functor '.'/2
, and its end is the atom []
. Defined as
list([]). list([_1|L]) :- list(L). list([]). list([_1|L]) :- list(L).
Usage 1: list(L)
L
is a list.
Usage 2: list(L)
L
is a list.
list(L,T)
L
is a list, and for all its elements, T
holds.
Meta-predicate with arguments: list(?,pred(1))
.
Usage 1: list(L,T)
L
is a list of T
s.
Usage 2: list(L,T)
L
is a list of T
s.
Usage 1: member(X,L)
X
is an element of L
.
Usage 2: member(X,L)
X
is an element of L
.
A sequence is formed with zero, one or more occurrences of the operator
','/2
. For example, a, b, c
is a sequence of three atoms, a
is a sequence of one atom.
Meta-predicate with arguments: sequence(?,pred(1))
.
Usage 1: sequence(S,T)
S
is a sequence of T
s.
Usage 2: sequence(S,T)
S
is a sequence of T
s.
Meta-predicate with arguments: sequence_or_list(?,pred(1))
.
Usage 1: sequence_or_list(S,T)
S
is a sequence or list of T
s.
Usage 2: sequence_or_list(S,T)
S
is a sequence or list of T
s.
Usage 1: character_code(T)
T
is an integer which is a character code.
T
is an integer.
(int/1
)
Usage 2: character_code(T)
T
is an integer which is a character code.
T
is an integer.
(int/1
)
A string is a list of character codes. The usual syntax for strings "string"
is allowed, which is equivalent to [0's,0't,0'r,0'i,0'n,0'g]
or [115,116,114,105,110,103]
. There is also a special Ciao syntax when the list is not complete: "st"||R
is equivalent to [0's,0't|R]
.
Usage 1: string(T)
T
is a string (a list of character codes).
T
is a list of character_code
s.
(list/2
)
Usage 2: string(T)
T
is a string (a list of character codes).
T
is a list of character_code
s.
(list/2
)
Usage 1: predname(P)
P
is a Name/Arity structure denoting a predicate name:
predname(P/A) :- atm(P), nnegint(A). predname(P/A) :- atm(P), nnegint(A).
Usage 2: predname(P)
P
is a Name/Arity structure denoting a predicate name:
predname(P/A) :- atm(P), nnegint(A). predname(P/A) :- atm(P), nnegint(A).
Usage 1: atm_or_atm_list(T)
T
is an atom or a list of atoms.
Usage 2: atm_or_atm_list(T)
T
is an atom or a list of atoms.
This property captures the notion of type or
property compatibility. The instantiation or constraint state of the term is compatible with the given property, in the sense that assuming that imposing that property on the term does not render the store inconsistent. For example, terms X
(i.e., a free variable), [Y|Z]
, and [Y,Z]
are all compatible with the regular type
list/1
, whereas the terms f(a)
and [1|2]
are not.
Meta-predicate with arguments: compat(?,pred(1))
.
Usage 1: compat(Term,Prop)
Term
is compatible with Prop
Usage 2: compat(Term,Prop)
Term
is compatible with Prop
Usage 1: iso(G)
Usage 2: iso(G)
Usage 1: not_further_inst(G,V)
V
is not further instantiated.
Usage 2: not_further_inst(G,V)
V
is not further instantiated.
Usage 1: regtype(G)
Usage 2: regtype(G)
Go to the first, previous, next, last section, table of contents.