MODE BINT = UNION(BOOL,INT)
BINT b = TRUE
REF UB
can be dereferenced to UB
.
UNION(INT,[]INT,[,]INT) mint
CHAR
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.
PROC ucis=(CHAR ch,[]CHAR s) UNION(INT,VOID): IF INT p = ch FIND s; p >= LWB s THEN p ELSE EMPTY FI
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
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
MODE CRIB = UNION(CHAR,REAL,INT,BOOL)
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
UABS "c"; UABS -4.0; UABS -3; UABS TRUE
Sian Mountbatten 2012-01-19