Ex
8.1MODE BINT = UNION(BOOL,INT)
Ex
8.2BINT b = TRUE
Ex
8.3REF UB can be dereferenced to UB.
Ex
8.4UNION(INT,[]INT,[,]INT) mint
Ex
8.5CHAR
before being united. The second is dereferenced to mode
[]CHAR and then united. The two values of the united mode are
regarded as a row-display and the procedure is then called. The
second parameter is an example of an anonymous name--no identifier
is attached.
Ex
8.6
PROC ucis=(CHAR ch,[]CHAR s)
UNION(INT,VOID):
IF INT p = ch FIND s; p >= LWB s
THEN p
ELSE EMPTY
FI
Ex
8.7
PROC p = (MIRC m)IRC:
CASE m IN
([]INT i): (INT sum:=0;
FOR j FROM LWB i TO UPB i
DO sum+:=i[j] OD;
sum),
([]REAL r):(REAL sum:=0;
FOR j FROM LWB r TO UPB r
DO sum+:=r[j] OD;
sum),
([]COMPL c):(COMPL sum:=0;
FOR j FROM LWB c TO UPB c
DO sum+:=c[j] OD;
sum)
ESAC
Ex
8.8
OP * = (IRC a,b)IRC:
CASE a IN
(INT i): CASE b IN
(INT j): i*j,
(REAL j): i*j,
(COMPL j): i*j
ESAC,
(REAL i): CASE b IN
(INT j): i*j,
(REAL j): i*j,
(COMPL j): i*j
ESAC,
(COMPL i):CASE b IN
(INT j): i*j,
(REAL j): i*j,
(COMPL j): i*j
ESAC
ESAC
Ex
8.9MODE CRIB = UNION(CHAR,REAL,INT,BOOL)
Ex
8.10
OP UABS = (CRIB c)UNION(INT,REAL):
CASE c IN
(CHAR a): ABS a,
(REAL a): ABS a,
(INT a): ABS a,
(BOOL a): ABS a
ESAC
Ex
8.11UABS "c"; UABS -4.0; UABS -3; UABS TRUE
Sian Mountbatten 2012-01-19