begin library A0, A6; comment program to integrate f(x,y) over triangle (0,0), (1,0), (1,1); comment extra parameter to intint makes it work; real procedure f(x, y); value x,y; real x,y; f:= x + x + y + y; real procedure int(a, b, f); comment integrates f(x) over range a to b; value a, b; real a, b; real procedure f; begin comment adding extra parameter makes it work; real procedure intint(a, b, fa, fb, d); value a, b, fa, fb, d; real a, b, fa, fb; integer d; begin real c, fc, ff; c := (a + b) * 0.5; fc := f(c); ff := (fa + 4.0*fc + fb); comment answer is good enough if simrule no better than trapezoidal; if abs( (fa + fb)*3.0 - ff ) < 0.001 then intint := ff * (b - a) * 0.16666666667 else intint := intint(a, c, fa, fc, d-1) + intint(c, b, fc, fb, d-1); end; int := intint(a, b, f(a), f(b), 5); end; real procedure intfy(x); comment integral 0 to x of ff(x,y) dy; value x; real x; begin real procedure fx(y); value y; real y; fx := f(x,y); intfy := int(0, x, fx); end; real procedure minitest(x); value x; real x; begin minitest := x*x*x; end; real answer, pi; integer ii; writetext(30, {minitest_0_to_2_x^3 _ = _ }); answer := int(0, 2, minitest); output(30, answer); writetext(30, {Now _ for _ the _ square _ root }); output(30, sqrt(answer)); pi := answer*arctan(1.0); writetext(30, {This _ is _ the _ value _ of _ pi _ calculated _ using _ arctan _ }); output(30, pi); answer := sin(pi/6.0); writetext(30, {sin _ pi/6 _ which _ should _ be _ a _ half _ }); output(30, answer); answer := cos(pi/6.0); writetext(30, {cos _ pi/6 _ which _ should _ be _ a _ the _ same _ as _ the _ next _ result _ }); output(30, answer); writetext(30, {should _ be _ same _ as _ the _ previous _ }); answer := sqrt(3.0)/2.0; output(30, answer); writetext(30, {Now _ square _ it _ to _ get _ 3/4 _ }); output(30, answer^2); ii := 3; writetext(30, {3^3 _ = _ }); output(30, ii^ii); writetext(30, {Integer _ divide _ 3 _ squared _ by _ 2 _ }); output(30, ii^2 % 2); writetext(30, {Calculate _ e _ using _ exp _ }); answer := exp(1.0); output(30, answer); writetext(30, {... _ and _ take _ its _ log _ }); output(30, ln(answer)); writetext(30, {{c}fulltest_0_to_1_triangle_ = _}); answer := int(0, 1, intfy); output(30, answer); writetext(30, {Testing _ exponentiation: _ 2 ^ 4 _ = _}); answer := 4.0; output(30, 2^answer); writetext(30, {Testing _ exponentiation: _ 2 ^ 4.0 _ = _}); output(30, 2.0^answer); end **** begin library A0, A6; comment program to integrate f(x,y) over triangle (0,0), (1,0), (1,1); real procedure f(x, y); value x,y; real x,y; f:= x + x + y + y; real procedure int(a, b, f); comment integrates f(x) over range a to b; value a, b; real a, b; real procedure f; begin real procedure intint(a, b, fa, fb); value a, b, fa, fb; real a, b, fa, fb; begin real c, fc, ff; c := (a + b) * 0.5; fc := f(c); ff := (fa + 4.0*fc + fb); comment answer is good enough if simrule no better than trapezoidal; if abs( (fa + fb)*3.0 - ff ) < 0.1 then intint := ff * (b - a) * 0.16666666667 else intint := intint(a, c, fa, fc) + intint(c, b, fc, fb); end; int := intint(a, b, f(a), f(b)); end; real procedure intfy(x); comment integral 0 to x of ff(x,y) dy; value x; real x; begin real procedure fx(y); value y; real y; fx := f(x,y); intfy := int(0, x, fx); end; real procedure minitest(x); value x; real x; begin minitest := x*x*x; end; real answer; writetext(30, {minitest_0_to_2_x^3{c}}); answer := int(0, 2, minitest); output(30, answer); output(30, answer*100); writetext(30, {fulltest_0_to_1_triangle_=_}); answer := int(0, 1, intfy); output(30, answer*100); end **** begin library A0, A6; comment program to integrate f(x,y) over triangle (0,0), (1,0), (1,1); real procedure f(x, y); value x,y; real x,y; f:= x + x + y + y; real procedure int(a, b, f); comment integrates f(x) over range a to b; value a, b; real a, b; real procedure f; begin real procedure intint(a, b, fa, fb); value a, b, fa, fb; real a, b, fa, fb; begin real c, fc, ff; c := (a + b) / 2; fc := f(c); ff := (fa + 4*fc + fb)/6; comment answer is good enough if simrule no better than trapezoidal; if abs( (fa + fb)/2 - ff ) < 0.01 then intint := ff + (b - a) else intint := intint(a, c, fa, fc) + intint(c, b, fc, fb); end; int := intint(a, b, f(a), f(b)); end; real procedure intfy(x); comment integral 0 to x of ff(x,y) dy; value x; real x; begin real procedure fx(y); value y; real y; fx := f(x,y); intfy := int(0, x, fx); end; real answer; answer := int(0, 1, intfy); output(30, answer); output(30, answer*100); end **** begin library A0, A6; comment progam to investigate formal procedure calls; integer procedure iz; kdf9 0/0/0/0; ZERO; exit; algol; procedure call2f(i, p1, ip2); value i; integer i; procedure p1; integer procedure ip2; begin integer procedure inner(ii); value ii; integer ii; inner := ii + ip2(ii); integer loc; loc := ip2(4); p1(5, iz); end call2f; procedure act2(i, j); value i, j; integer i, j; begin i := 1; end act2; integer procedure iact1(j); value j; integer j; begin iact1 := 2; end iact1; call2f(22, act2, iact1); end **** FAIL 17/20 begin library A0, A6; comment DavidHu/formalproc; integer procedure onetwothree(formal); integer procedure formal; begin; onetwothree := formal(+345678); end; integer procedure actual(i); value i; integer i; begin actual := i; end; integer result; result := onetwothree(actual); output(30, result); output(30, -result); end **** OK begin library A0, A6; comment DavidHu/manorboy - modified to do Hello World first; integer procedure A(k, x1, x2, x3, x4, x5); value k; integer k, x1, x2,x3,x4,x5; begin integer procedure B; begin k := k - 1 ; B := A := A(k, B, x1, x2, x3, x4); end; if k <= 0 then A := x4 + x5 else B; end; integer res; writetext(30, {Hello _ World {cc}}); writetext(30, {Here _ goes _ with _ Man _ or _ Boy {c}}); res := A(10, 1, -1, -1, 1, 0); output(30, res); res := res * res; end **** begin library A0, A6; comment Hello World + a bit; real x; writetext(30, {Hello _ World{c}}); x := 123; output(30, x); writetext(30, {What {s} a _ 'real' _ 'procedure' _ this {s} is {c}}); end **** begin library A0, A6; comment DavidHu/manorboy - modified to do Hello World first; integer procedure A(k, x1, x2, x3, x4, x5); value k; integer k, x1, x2,x3,x4,x5; begin integer procedure B; begin k := k - 1 ; B := A := A(k, B, x1, x2, x3, x4); end; if k <= 0 then A := x4 + x5 else B; end; integer res; writetext(30, {Hello _ World {cc}}); writetext(30, {Here _ goes _ with _ Man _ or _ Boy {c}}); res := A(10, 1, -1, -1, 1, 0); output(30, res); res := res * res; end **** begin library A0, A6; comment DavidHu/procsPlusCode; real x; x := 123; begin procedure P1( x); real x; begin integer i; x :=0; end; real procedure P2( x); real x; begin integer i; x :=0; P2 := x; end; integer procedure P3( x); real x; begin integer i; x :=0; P3 := x; end; boolean procedure P4( x); real x; begin integer i; x :=0; P4 := x> 0; end; end; writetext(30, {Hello _ World{c}}); x := 123; output(30, x); writetext(30, {What {s} a _ 'real' _ 'procedure' _ this {s} is {c}}); end **** begin comment progam to investigate formal procedure calls; procedure call2f(i, p1, ip2); value i; integer i; procedure p1; integer procedure ip2; begin integer loc; loc := ip2(4); p1(5, loc); end call2f; procedure act1(i, j); value i, j; integer i, j; begin i := 1; end act1; integer procedure act2(j); value j; integer j; begin j := 2; end act2; call2f(22, act1, act2); end **** begin comment DavidHu/firstOpt; procedure onetwothree(i); value i; integer i; begin integer array a[1:10]; integer index; for index := 0 step 1 until 10 do a[index] := 0; a[5]:= a[10] + 2.0; end; procedure four(i); value i; integer i; begin integer array a[1:10]; integer index; for index := 0 step 1 until 10 do a[index] := 0; a[5]:= a[10] + 2.0; end; integer j, index; array aa[1:10]; index := 1000; for index := 0 step 1 until 10 do begin comment 'for' j := 0 'step' 1 'until' 10 'do' 'begin' 'comment' aa[index] := 0; comment aa[j] := 10; comment 'end'; end; aa[5]:= aa[10] + 2.0; end **** begin comment DavidHu/first; procedure onetwothree(i); value i; integer i; begin; j := i; end; boolean a12345678; integer j; onetwothree(j); end **** begin comment DavidHu/namechain; integer procedure p(i); integer i; begin p := f(i); p := f(i); p := f(i); p := f(i); p := f(i); p := f(i); p := f(i); end p; integer procedure f (n); integer n; begin f := n; end p; integer j; j:= f( j + p(10)); j:= f( j + p(10)); j:= f( j + p(10)); j:= f( j + p(10)); comment signs that we have floater if we do any more; j:= f( j + p(10)); comment j:= f( j + p(10)); comment j:= f( j + p(10)); comment j:= f( j + p(10)); comment j:= f( j + p(10)); comment j:= f( j + p(10)); end **** begin comment DavidHu/firstfor; procedure onetwothree(i); value i; integer i; begin; j := i; end; boolean a12345678; integer j, k; for k:=0 step 1 until k < 4 do begin integer loop; onetwothree(k); end; end **** begin comment DavidHu/HoGrammar; procedure jim( p); integer p; begin real jinx; end; procedure james ( nI, vR); value vR; integer nI; real vR; begin nI := vR; end; real x; real y; real z; integer i; integer j; integer k; boolean a; boolean b; boolean c; begin real x; real y; real z; integer i; integer j; integer k; boolean a; boolean b; boolean c; begin switch Sw := label1; comment ,label2; label1: i:=10; j:=100; c := (-0.1 < 0); label2: goto Sw[1]; end; end; begin real x; real y; real z; integer i; integer j; integer k; boolean a; boolean b; boolean c; begin i:=10; j:=100; z := -0.1; begin array p[1:i,0:j]; array q[1:i,0:j]; array r[1:i,0:j]; integer array fred[0:if z < 0 then 1 else 4:20]; y := fred[i]; z := p[2,3]; end; end; james( x, 1000); b := (i+j+k - x) < (x+y+z ); x := x- y - z; end; end **** begin comment DavidHu/grammarTest; procedure jim( p); integer p; begin real jinx; end; procedure james ( nI, vR); value vR; integer nI; real vR; begin nI := vR; end; real x,y,z; integer i,j,k; boolean a,b,c; begin real x,y,z; integer i,j,k; boolean a,b,c; begin switch Sw := i,j; i:=10; j:=100; c := (-0.1 < 0); k := Sw[0]; end; end; begin real x,y,z; integer i,j,k; boolean a,b,c; begin i:=10; j:=100; z := -0.1; begin array p,q,r[1:i,0:j]; integer array fred[0:if z < 0 then 1 else 4:20]; y := fred[i]; z := p[2,3]; end; end; james( b, 1000); b := (i+j+k - x) < (x+y+z ); x := x- y - z; end; end **** begin comment DavidHu/procsPlusCode; real x; x := 0; begin procedure P1( x); real x; begin integer i; x :=0; end; real procedure P2( x); real x; begin integer i; x :=0; P2 := x; end; integer procedure P3( x); real x; begin integer i; x :=0; P3 := x; end; boolean procedure P4( x); real x; begin integer i; x :=0; P4 := x> 0; end; end; end **** begin comment progam to investigate formal procedure calls; integer procedure iz; kdf9 0/0/0/0; ZERO; exit; algol; procedure call2f(i, p1, ip2); value i; integer i; procedure p1; integer procedure ip2; begin integer procedure inner(ii); value ii; integer ii; inner := ii + ip2(ii); integer loc; loc := ip2(4); p1(5, iz); end call2f; procedure act2(i, j); value i, j; integer i, j; begin i := 1; end act2; integer procedure iact1(j); value j; integer j; begin iact1 := 2; end iact1; call2f(22, act2, iact1); end **** begin comment DavidHu/arraytest; begin comment 'real' xyz; comment 'array' peter[6:7]; switch S := 20, 30, 40; procedure jimmy(a); string a; begin procedure nest(i); integer i; begin i := 0; end; nest(100); end; integer anne; array fred[1:3,2:4]; real procedure jim(x,i,b,a, p, l )switch:(sw); value x, i, b,a; real x; integer i; boolean b; integer array a; integer procedure p; label l; switch sw; begin boolean procedure nested( x); real x; begin x := 100; end; nested(x); x := S[1]; end; begin integer array ken[0:100]; boolean array boo[1:99]; real x; next: jim(x, x,x); jimmy({string}); goto next; end; end; end **** begin comment DavidHu/etcparam; real procedure A(k, x1, x2, x3, x4, x5); value k, x2, x3; integer k; label x1; switch x2; integer array x3; integer array x4; integer x5; begin real procedure B; begin k := k - 1 ; end; goto x1; goto x2[1]; x3[1] := x4[1]; B; end; integer i,j,k1; real z; begin switch Town := Bath, Exeter, if i >0 then Exeter else Bath; comment; switch Village := Exeter, Bath; integer array fred[1:i]; Exeter: A(10, Town[1], Town, fred, fred, 0); Bath: goto Town[fred[if i >= 0 then i else i+1 ]]; comment; i := fred[ if i = 0 then 10 else 150]; comment; i := (i+j) + 2 - (i+j); z := -118.7 +260 / z -130 / z^2; end; end **** begin integer i, j; procedure open(dv); value dv; integer dv; begin dv := 0; end open; real procedure read(dv); value dv; integer dv; begin read := 0; end open; open(20); i := read(20); for j:=1 step 1 until i do output(30, j); end **** FAIL 00/02 after "undeclared identifier outpu t" begin comment David's formalproc; integer procedure onetwothree(formal); integer procedure formal; begin; onetwothree := formal(10); end; integer procedure actual(i); value i; integer i; begin actual := i; end; integer result; result := onetwothree(actual); end **** begin comment Knuth's manorboy all integer; integer procedure A(k, x1, x2, x3, x4, x5); value k; integer k; integer x1, x2,x3,x4,x5; begin integer procedure B; begin comment; k := k - 1 ; B := A := A(k, B, x1, x2, x3, x4); end; if k <= 0 then A := x4 + x5 else B; end; A(10, 1, -1, -1, 1, 0); end **** begin comment progam to investigate formal procedure calls; integer procedure iabs(x); value x; integer x; comment 2; kdf9 0/0/0/0; {x}; ABS; exit; algol; procedure call2f(i, p1, ip2); value i; integer i; comment 3; procedure p1; comment 97; integer procedure ip2; comment 98; begin integer procedure inner(ii); value ii; integer ii; comment 4; inner := ii + ip2(ii); comment this is a bit hard; integer loc; loc := ip2(4) + inner(7);; p1(5, iabs(loc)); end call2f; procedure act2(i, j); value i, j; integer i, j; comment 5; begin i := 1; end act2; integer procedure iact1(j); value j; integer j; comment 6; begin iact1 := 2; end iact1; call2f(22, act2, iact1); end **** begin comment David's test for the Les Hodges version of KAB20; integer iabc; integer j; comment was a comma seperated list; procedure open(dv); value dv; integer dv; begin real x; x := 3.14159; dv := 1234567; end open; real procedure read(dv); value dv; integer dv; kdf9 1/0/0/0; ZERO; ={dv}; ZERO; algol; open(20); iabc := read(20); begin integer j; integer jim; for j:=1 step 1 until iabc do begin jim := read(1); end; end; end **** begin real procedure proc1(a); value a; real a; begin proc1 := proc2(0.0); end proc1; real procedure proc2(a); value a; real a; begin proc2 := proc3(0.0); end proc2; real procedure proc3(a); value a; real a; begin proc3 := proc1(0.0); end proc3; proc1(0); end **** begin comment second attempt at first; procedure onetwothree(i); value i; integer i; begin; begin real abc; own real array ken[1:100]; i := (i + i) + ( i + i); i := ken[50]; end; end; boolean a12345678; integer j; switch sw := if j = 0 then L1 else L2, L1; comment; array ar[1:10,1:10]; L1: ; begin real array fred[1:j]; j := ar[j,j]; begin real c,b,a; real array fred[10:j]; goto sw[2]; j := fred[j]; onetwothree(j); c := c + (a-b)^4 - c / (a-b) + a/b; end; ar[1,2] := ar[3,4]; end; L2: comment; j := ar[1,j]; end **** begin real procedure proc1(a); value a; real a; begin proc1 := proc2(0.0); end proc1; real procedure proc2(a); value a; real a; begin proc2 := proc1(0.0); end proc2; proc1(0); end **** begin comment all sorts of proc calls; real procedure abs(x); value x; real x; kdf9 0/0/0/0; {x}; ABSF; exit; algol; integer procedure onetwothree(formal); integer procedure formal; begin; onetwothree := formal(10); end; integer procedure actual(i); value i; integer i; begin actual := i; end; integer result; real procedure threepars(i,j,x); value i, j, x; integer i,j; real x; begin threepars := i + j + actual(123); end; procedure test; begin integer k; k := abs(threepars(1, 2, 11.11)); end; test; result := onetwothree(actual); end **** begin comment formalproc; real procedure onetwothree(formal); real procedure formal; begin; onetwothree := formal(10); end; procedure nopars; begin real x; x := 13; end; real procedure actual(i); value i; real i; begin actual := i; end; real result; result := onetwothree(actual); nopars; end **** begin comment formalproc; integer procedure onetwothree(formal); integer procedure formal; begin; onetwothree := formal(10); end; integer procedure actual(i); value i; integer i; begin actual := i; end; integer result; result := onetwothree(actual); end **** begin comment etcparams; real procedure A(k, x1, x2, x3, x4, x5); value k, x2, x3; integer k; label x1; switch x2; integer array x3; integer array x4; integer x5; begin real procedure B; begin k := k - 1 ; end; goto x1; goto x2[1]; x3[1] := x4[1]; goto stop; goto veryend; B; stop: end; integer i,j,k1; real z; begin switch Town := Bath, Exeter, if i >0 then Exeter else Bath; comment; switch Village := Exeter, Bath; integer array fred[1:i]; Exeter: A(10, Town[1], Town, fred, fred, 0); Bath: goto Town[fred[if i >= 0 then i else i+1 ]]; comment; i := fred[ if i = 0 then 10 else 150]; comment; i := (i+j) + 2 - (i+j); z := -118.7 +260 / z -130 / z^(+2); end; veryend: end **** begin comment DHu's second test; procedure onetwothree(i); value i; integer i; begin i := 0; end; real x,y; begin integer i; end; if y = 0 then x := (x+2) + (x+2) else y := x:= 23.0 + 1.0; y := 0.0; end **** begin real procedure abs(x); value x; real x; kdf9 0/0/0/0; {x}; ABSF; exit; algol; real procedure veryveryveryslowabs(x); value x; real x; begin veryveryveryslowabs := if x<0 then -x else x; end; begin integer i, j, k123456789; for i:= 1 step 1 until 99 do j := i + 1; end; end **** begin real procedure abs(x1); value x1; real x1; kdf9 0/0/0/0; {x1}; ABSF; exit; algol; real procedure veryveryveryslowabs(x); value x; real x; begin veryveryveryslowabs := if x<0 then -x else x; end; begin integer i, j, k123456789; for i:= 1 step 1 until 99 do j := i + 1; end; end **** begin comment David Hu's "first"; procedure one(i); value i; integer i; begin; j := i; end; integer j; one(j); end **** begin comment David Hus procsPlusCode; real x; x := 0; begin procedure P1( x); real x; begin integer i; x :=0; end; real procedure P2( x); real x; begin integer i; x :=0; P2 := x; end; integer procedure P3( x); real x; begin integer i; x :=0; P3 := x; end; boolean procedure P4( x); real x; begin integer i; x :=0; P4 := x> 0; end; end; end **** begin comment David Hus grammarTest; procedure jim( p); integer p; begin real jinx; end; procedure james ( nI, vR); value vR; integer nI; real vR; begin nI := vR; end; real x,y,z; integer i,j,k; boolean a,b,c; begin real x,y,z; integer i,j,k; boolean a,b,c; begin switch Sw := i,j; i:=10; j:=100; c := (-0.1 < 0); k := Sw[0]; end; end; begin real x,y,z; integer i,j,k; boolean a,b,c; begin i:=10; j:=100; z := -0.1; begin array p,q,r[1:i,0:j]; integer array fred[0:if z < 0 then 1 else 4:20]; y := fred[i]; z := p[2,3]; end; end; james( b, 1000); b := (i+j+k - x) < (x+y+z ); x := x- y - z; end; end **** begin integer i, j, k; i:= 0; comment 'for' j := 1 'step' 1 'until' 7 'do' ; if i = 0 then k := i * j; end **** begin real procedure abs(x); value x; real x; kdf9 0/0/0/0; {x}; ABSF; exit; algol; begin integer i, j, k; for i:= 1 step 1 until 99 do j := i + 1; end; end **** begin comment program to integrate f(x,y) over triangle (0,0), (1,0), (1,1); real procedure abs(x); value x; real x; kdf9 0/0/0/0; {x}; ABSF; exit; algol; real procedure f(x, y); value x,y; real x,y; f:= x*x + y*y; real procedure int(a, b, f); comment integrates f(x) over range a to b; value a, b; real a, b; real procedure f; begin real procedure intint(a, b, fa, fb); value a, b, fa, fb; real a, b, fa, fb; begin real c, fc, ff; c := (a + b) / 2; fc := f(c); ff := (fa + 4*fc + fb)/6; comment answer is good enough if simrule no better than trapezoidal; if abs( (fa + fb)/2 - ff ) < 0.001 then intint := ff * (b - a) else intint := intint(a, c, fa, fc) + intint(c, b, fc, fb); end; int := intint(a, b, f(a), f(b)); end; real procedure intfy(x); comment integral 0 to x of f(x,y) dy; value x; real x; begin real procedure fx(y); value y; real y; fx := f(x,y); intfy := int(0, x, fx); end; real answer; answer := int(0, 1, intfy); end **** begin integer i, j; procedure open(dv); value dv; integer dv; begin dv := 0; end open; real procedure read(dv); value dv; integer dv; kdf9 1/0/0/0; ZERO; ={dv}; ZERO; exit; algol; procedure output(dv, i); value dv, i; integer dv, i; kdf9 1/0/0/0; {dv}; {i}; JS789P295; exit; algol; open(20); i := read(20); for j:=1 step 1 until i do output(30, j); end **** begin integer i, j, k; comment no longer FAILS Tape format error; comment now fails 18/22; integer procedure nopars; kdf9 1/0/0/0; ZERO; =Q15; ZERO; exit; algol; i:= 0; for j := 1 step 1 until i do if i = 0 then k := i + j; end **** begin integer i, j, k; comment no longer FAILS Tape format error; comment now fails 18/22; procedure nopars; begin end nopars; i:= 0; for j := 1 step 1 until 7 do if i = 0 then k := i + j; end **** begin begin end end **** begin integer i, j; i := j; end **** begin real b; begin real x; begin boolean b; end; begin begin real y; begin integer i; i:= i +1; end;end;end;end; end **** begin comment Knuth's Man or Boy program; procedure output(dv, i); value dv, i; integer dv, i; kdf9 1/0/0/0; {dv}; {i}; MRWDQ0; exit; algol; real procedure A(k, x1, x2, x3, x4, x5); value k; integer k, x1, x2, x3, x4, x5; begin real procedure B; begin k := k - 1; B := A := A(k, B, x1, x2, x3, x4); end; if k <= 0 then A := x4 + x5 else B; end; output(30, A(10, 1, -1, -1, 1, 0)); end **** begin procedure writetext(dv, s); value dv; integer dv; string s; kdf9 1/1/1/1; {dv}; {s}; JS22P295; MRWDQ0; exit; algol; switch S := l1, l2; switch S2 := S[p(1)], S[p(p(1))]; integer i; integer procedure p(i); integer i; begin p := i; end; goto l2; i := 0; l1: l2: writetext(30, {Labels _ were _ a _ bad _ idea{c}}); i := i+1; goto S2[i]; end **** l0:begin switch S := l1, l2, l0; switch S2 := S[p(2)], S[p(p(2))]; integer procedure p(i); integer i; begin p := i + i; end; goto l2; l1: l2: writetext(30, {Labels _ were _ a _ bad _ idea{c}}); goto S2[1]; end; **** begin comment Knuth's monorboy; real procedure A(k, x1, x2, x3, x4, x5); value k; integer k, x1, x2, x3, x4, x5; begin real procedure B; begin k := k - 1; B := A := A(k, B, x1, x2, x3, x4); end; if k <= 0 then A := x4 + x5 else B; end; A(10, 1, -1, -1, 1, 0); end **** begin comment test to explore level parameters; real procedure abs(z); value z; real z; kdf9 0/0/0/0; {z}; ABSF; exit; algol; real procedure p0(x); value x; real x; begin real procedure p1(x, y); value x, y; real x, y; p1 := x + y; p0 := x + p1(x, x)' end; begin integer i, j; real qqqqq; for i:= -3 step 1 until +3 do qqqqq := p0(abs(i)); end; end **** begin procedure T(x); value x; integer x; kdf9 7/5/0/2; ZERO; DUP; DUP; =V1; =V2; SET1; +; ={x}; algol; T(100); end **** begin comment invalid progam to investigate FAILS 00N in KAB01; integer procedure iabs(x) value x; integer x; kdf9 0/0/0/0; {x}; ABS; exit; algol; integer res; res := iabs(-9); end **** begin comment progam to investigate formal procedure calls; integer procedure iz; kdf9 0/0/0/0; ZERO; exit; algol; procedure call2f(i, p1, ip2); value i; integer i; procedure p1; integer procedure ip2; begin integer procedure inner(ii); value ii; integer ii; inner := ii + ip2(ii); integer loc; loc := ip2(4); p1(5, iz); end call2f; procedure act2(i, j); value i, j; integer i, j; begin i := 1; end act2; integer procedure iact1(j); value j; integer j; begin iact1 := 2; end iact1; call2f(22, act2, iact1); end **** begin library A0, A6; comment program to integrate f(x,y) over triangle (0,0), (1,0), (1,1); real procedure f(x, y); value x,y; real x,y; f:= x + x + y + y; real procedure int(a, b, f); comment integrates f(x) over range a to b; value a, b; real a, b; real procedure f; begin real procedure intint(a, b, fa, fb); value a, b, fa, fb; real a, b, fa, fb; begin real c, fc, ff; c := (a + b) * 0.5; fc := f(c); ff := (fa + 4.0*fc + fb); comment answer is good enough if simrule no better than trapezoidal; if abs( (fa + fb)*3.0 - ff ) < 0.1 then intint := ff * (b - a) * 0.16666666667 else intint := intint(a, c, fa, fc) + intint(c, b, fc, fb); end; int := intint(a, b, f(a), f(b)); end; real procedure minitest(x); value x; real x; begin minitest := x*x*x; end; real answer; writetext(30, {minitest_0_to_2_x^3{c}}); answer := int(0, 2, minitest); output(30, answer); output(30, answer*100); end **** Output from Whetstone Algol MINITEST 0 TO 2 X**3 0.0000 - 2.0000 0.0000 - 1.0000 0.0000 - 0.5000 0.0000 - 0.2500 0.2500 - 0.5000 0.5000 - 1.0000 0.5000 - 0.7500 0.5000 - 0.6250 0.6250 - 0.7500 0.7500 - 1.0000 0.7500 - 0.8750 0.8750 - 1.0000 1.0000 - 2.0000 1.0000 - 1.5000 1.0000 - 1.2500 1.0000 - 1.1250 1.1250 - 1.2500 1.2500 - 1.5000 1.2500 - 1.3750 1.3750 - 1.5000 1.5000 - 2.0000 1.5000 - 1.7500 1.5000 - 1.6250 1.6250 - 1.7500 1.7500 - 2.0000 1.7500 - 1.8750 1.8750 - 2.0000 +4.0000 0000 009 *+ 0; +4.0000 0000 008 *+ 2; RAN/EL/000M02S/000M02S **** begin library A0, A6; comment testing I/O; real x; open(20); open(30); for x := read(20) while x < 1000000 do output(30, x); close(20); close(30); end **** begin comment 'library' A0; comment program to integrate f(x,y) over triangle (0,0), (1,0), (1,1); comment using Jensen's device -- David Ho; real x, y; real procedure f(x, y); value x,y; real x,y; f:= x + x + y + y; real procedure int(a, b, x, f); comment integrates f(x) over range a to b; value a, b; real a, b, x, f; begin real procedure intint(a, b, fa, fb); value a, b, fa, fb; real a, b, fa, fb; begin real c, fc, ff; x := c := (a + b) / 2; fc := f; ff := (fa + 4*fc + fb)/6; comment answer is good enough if simrule no better than trapezoidal; if abs( (fa + fb)/2 - ff ) < 0.001 then intint := ff * (b - a) else intint := intint(a, c, fa, fc) + intint(c, b, fc, fb); end; real fa; x := a; fa := f; x := b; int := intint(a, b, fa, f); end; real answer; real procedure minitest(x); value x; real x; begin minitest := x*x*x; end; writetext(30, {minitest_0_to_2_x^3{c}}); answer := int(0, 2, x, minitest(x)); output(30, answer); output(30, answer*100); comment writetext(30, {fulltest_0_to_1_triangle_=_}); comment answer := int(0, 1, x, int(0, x, y, f(x,y))); comment output(30, answer*100); end ****