Values of modes INT
, REAL
,
CHAR
and []CHAR
can be compared with each
other. The expression
3 = 1+2
yields TRUE
. Similarly,
1+1=1
yields FALSE
. The equals symbol = can also be written
EQ
. Likewise, the formula
35.0 EQ 3.5e1
should also yield TRUE
, but you should be chary of
comparing two REAL
s for equality or inequality because
the means of transforming the denotations into binary values may yield
values which differ slightly. The operator is also defined for both
operands being CHAR
or []CHAR
. In the
latter case, the two multiples must have the same number of elements,
and corresponding elements must be equal if the operator is to yield
TRUE
. Thus
"a" = "abc"
yields FALSE
. Notice that the bounds do not have to be
the same. So a
and b
declared as
[]CHAR a = "Dodo" [@0], b = "Dodo"
yield TRUE
when compared with the equals operator.
Because the rowing coercion is not allowed in
formulæ, the operator is declared in the standard
prelude for mixed modes (such as REAL
and INT
).
The converse of =
is /=
(not equal). So the formula
3 /= 2
yields TRUE
, and
"r" /= "r"
yields FALSE
. An alternative representation of
/=
is NE. The
priority of both =
and /=
is 4. The operands of =
and /=
can be
any combination of values of mode INT
and
REAL
. No widening takes place, the
operators being declared for the mixed modes.
The ordering operators <,
>, <=
and >= can be used to compare values of
modes INT
, REAL
, CHAR
and
[]CHAR
in the same way as =
and
/=
. They are read “less than”,
“greater than”, “less than or equal to” and
“greater than or equal to” respectively. The formula
3 < 3.1
yields TRUE
.
If the identifiers b
and c
are declared
as having mode CHAR
, then the formula
c < b
will yield the same value as
ABS c < ABS b
and similarly for the operator >
. The operators <=
and
>=
can both be used with equal values. For
example,
24 <= 24.0
yields TRUE
.
For values of mode []CHAR
, the formula
"abcd" > "abcc"
yields TRUE
. Two values of mode []CHAR
of
different length can be compared. For example, both
"aaa" <= "aaab"and
"aaa" <= "aaaa"
yield TRUE
. Alternative representations for these
operators are LT
and GT
for
<
and >
and LE
and
GE
for <=
and >=
respectively. The priority of all four ordering
operators is 5.
Note that apart from values of mode []CHAR
, no
operators are defined in the standard prelude for multiples.
ABS NOT TRUE
3.4 + ABS TRUE
-3.5 <= -13.4
2e10 >= 3e9
"abcd" > "abc"
[]INT i1 = (2,3,5,7); []CHAR t = "uvwxyz"what is the value of each of the following? Ans
UPB i1 < UPB t
t[2:4] >= t[2:3]
i1[3] < UPB t[2:]
Sian Mountbatten 2012-01-19