Ex
6.1<formal-mode-param> = <actual-mode-param>
Ex
6.2
Ex
6.3
REAL
INT
-5
Ex
6.4
([]INT i)[]CHAR:
(
[LWB i:UPB i]CHAR s;
FOR n FROM LWB i TO UPB i
DO
s[n]:=REPR ii
OD;
s
)
Ex
6.5(REF REAL id)REAL:
Ex
6.6(REF CHAR a,b)REF CHAR:
Ex
6.7
(STRING s)[]STRING:
BEGIN
FLEX[1:0]STRING r:="";
#rowing coercion#
BOOL in word:=FALSE;
INT st:=LWB s,fn:=UPB s;
WHILE s[st]=blank & st<=UPB line
DO
st+:=1
OD;
WHILE s[fn]=blank & fn>=st
DO
fn-:=1
OD;
STRING ss:=s[st:fn]+blank;
FOR c FROM LWB ss UNTIL c > UPB ss
DO
CHAR ssc=ss[c];
IF ssc/=blank & NOT in word
THEN st:=c; in word:=TRUE
ELIF ssc=blank & NOT in word
THEN SKIP
ELIF ssc/=blank & in word
THEN SKIP
ELSE #ssc=blank & in word#
fn:=c-1; in word:=FALSE;
[UPB r+1]STRING rr;
rr[:UPB r]:=r;
rr[UPB rr]:=ss[st:fn];
r:=rr
#The word has been added to r#
FI
OD;
r[2:] #Omit the null string#
END
Ex
6.8REAL:
Ex
6.9VOID: print("Hi, there")
Ex
6.10| Occurrences | ||
| Line | Applied | Defining |
| 5 | T p | 2 |
| 5 | T c | 3 |
| 8 | T 4 | 2 |
| 8 | T q | 7 |
| 10 | T REPR 2 | 3 |
| 12 | T c | 3 |
| 12 | T q | 2 |
Ex
6.11
REF INT.
16 of
mode INT.
INT.
INT.
Ex
6.12REF[]INT can be dereferenced to a
multiple of mode []INT.
Ex
6.13
Ex
6.14
Ex
6.15
+ which
has already been declared as a monadic operator.
Ex
6.16OP PP = (REF INT a)REF INT: a+:=1
Ex
6.17PROC p = VOID: a:=3
Ex
6.18
PROC p = INT:
BEGIN
[(INT i; read((i,newline)); i)]INT a;
read(a);
INT sum:=0;
FOR i TO UPB a DO sum+:=a[i] OD;
sum
END
Ex
6.19
PROC p = REF[,]CHAR:
(
HEAP[3,20]CHAR n;
read((n,newline));
n
)
Ex
6.20
PROC p=(REF REAL r)REF REAL:
r:=r/pi*180
Ex
6.21
PROC p = (STRING s,INT i)VOID:
(
INT ii = IF i < 0
THEN print(newline); ABS i
ELSE i
FI;
TO ii DO print(s) OD
)
Ex
6.22
PROC num in multiple=(INT i,
[]INT m,
REF INT p)BOOL:
(
INT pos:=LWB m - 1;
FOR j FROM LWB m TO UPB m
WHILE pos < LWB m
DO
(i=m[j]|pos:=j)
OD;
IF pos < LWB m
THEN FALSE
ELSE p:=pos; TRUE
FI
)
Ex
6.23
10.0
0.3
0.0.
Ex
6.24PROC reverse = ([]CHAR s)[]CHAR: (SIZE s=1|s|s[UPB s]+reverse(s[:UPB s-1]))
Ex
6.25
PROC(INT)INT cube;
PROC square=(INT p)INT:
(ODD p|cube(p)|p^2);
cube:=(INT p)INT: (ODD p|p^3|square(p))
Ex
6.26
Ex
6.27
OP LARGEST = ([,]REAL a)REAL:
(
REAL largest:=a[1 LWB a,2 LWB a];
FOR i FROM 1 LWB a TO 1 UPB a
DO
FOR j FROM 2 LWB a TO 2 UPB a
DO
largest:=largest MAX a[i,j]
OD
OD;
largest
)
Ex
6.28PROC pr = (INT n)REF[]INT: HEAP[n]INT
Ex
6.29
PROC leng = INT:
(STRING s;
read((s,newline));
UPB s)
Sian Mountbatten 2012-01-19