Calc has a set of functions for accessing the current declarations in a convenient manner. These functions return 1 if the argument can be shown to have the specified property, or 0 if the argument can be shown not to have that property; otherwise they are left unevaluated. These functions are suitable for use with rewrite rules (see Conditional Rewrite Rules) or programming constructs (see Conditionals in Macros). They can be entered only using algebraic notation. See Logical Operations, for functions that perform other tests not related to declarations.
For example, ‘dint(17)’ returns 1 because 17 is an integer, as
do ‘dint(n)’ and ‘dint(2 n - 3)’ if
n has been declared
int, but ‘dint(2.5)’ and ‘dint(n + 0.5)’ return 0.
Calc consults knowledge of its own built-in functions as well as your
own declarations: ‘dint(floor(x))’ returns 1.
dint function checks if its argument is an integer.
dnatnum function checks if its argument is a natural
number, i.e., a nonnegative integer. The
checks if its argument is numerically an integer, i.e., either an
integer or an integer-valued float. Note that these and the other
data type functions also accept vectors or matrices composed of
suitable elements, and that real infinities ‘inf’ and ‘-inf’
are considered to be integers for the purposes of these functions.
drat function checks if its argument is rational, i.e.,
an integer or fraction. Infinities count as rational, but intervals
and error forms do not.
dreal function checks if its argument is real. This
includes integers, fractions, floats, real error forms, and intervals.
dimag function checks if its argument is imaginary,
i.e., is mathematically equal to a real number times ‘i’.
dpos function checks for positive (but nonzero) reals.
dneg function checks for negative reals. The
function checks for nonnegative reals, i.e., reals greater than or
equal to zero. Note that Calc’s algebraic simplifications, which are
effectively applied to all conditions in rewrite rules, can simplify
an expression like ‘x > 0’ to 1 or 0 using
So the actual functions
are rarely necessary.
dnonzero function checks that its argument is nonzero.
This includes all nonzero real or complex numbers, all intervals that
do not include zero, all nonzero modulo forms, vectors all of whose
elements are nonzero, and variables or formulas whose values can be
deduced to be nonzero. It does not include error forms, since they
represent values which could be anything including zero. (This is
also the set of objects considered “true” in conditional contexts.)
deven function returns 1 if its argument is known to be
an even integer (or integer-valued float); it returns 0 if its argument
is known not to be even (because it is known to be odd or a non-integer).
Calc’s algebraic simplifications use this to simplify a test of the form
‘x % 2 = 0’. There is also an analogous
drange function returns a set (an interval or a vector
of intervals and/or numbers; see Set Operations) that describes
the set of possible values of its argument. If the argument is
a variable or a function with a declaration, the range is copied
from the declaration. Otherwise, the possible signs of the
expression are determined using a method similar to
etc., and a suitable set like ‘[0 .. inf]’ is returned. If
the expression is not provably real, the
dscalar function returns 1 if its argument is provably
scalar, or 0 if its argument is provably non-scalar. It is left
unevaluated if this cannot be determined. (If Matrix mode or Scalar
mode is in effect, this function returns 1 or 0, respectively,
if it has no other information.) When Calc interprets a condition
(say, in a rewrite rule) it considers an unevaluated formula to be
“false.” Thus, ‘dscalar(a)’ is “true” only if
provably scalar, and ‘!dscalar(a)’ is “true” only if
is provably non-scalar; both are “false” if there is insufficient
information to tell.