214 van Wijngaarden, et al.inoperator of etudash + vdash,udash - vdash,u x vdash + udash x v,(udash - et x vdash) / v,(v ] (n~f const ec): v x u ! (heap const c;value arc := value ofec- I; c) x udash)asaC ,(ref call el):begin ref function f = function name of el;form g = parameter of el; ref car y = bound vat of f;heap function fdash := (y, derivative of(body off, y));(heap call := (fdash, g)) x derivative of(g, x)andesac ;proc value of = (form e) real :case e in(rof const ec): value of ec ,(tel vat ev): value of ev ,(ref triple et):case real u = value of(left operand of et),v = value of (right operand of et);operator of etinu+v, u-v, uxv, u/v, exp(vxln(u))eSaC ,(tel call el):berlin ref function f= function name of el;value of bound car off: = value of (parameter of el);value of (body off)endesac;heap form f, g;heap var a : = ("a", skip), b : = ("b", skip), x : = ("x", skip);¢ start here ¢read ((value of a, value of b, value of x));f :=a + x / (b+ x);g : = (f+ one) / (f. one);print ((value of a, value of b, value of x,value of(derivative of(g, ¢ with respect to ¢ x))))end ¢ example of formula manipulation ¢11.11. Information retrievalbeginmode ra = ref auth, rb = ref book;ALGOL <strong>68</strong> Revised Reportmode auth = struct (string hame, ra next, rb book),book = struct (string title, rb next);ra auth, first auth : = nil, last auth;rb book; string name, title; int i; file input, output;op.en (input, "", remote in); open (output, "", remote out);putf (output, ($p"to enter a new author, type .... author"", a space,"x"and his name."l"to enter a new book, type .... book"", a space,"x"the name of the author, a new line, and the title."l"for a listing of the books by an author, type .... list';",'~c"a space, and his name."l"to find the author of a book, type ""find"", a new line,"x"and the title."l"to end, type ""end ...... al$, "."));proc update = void :if ra (first auth) :=: nilthen auth : = first auth : = last auth : = heap auth : = (name, nil, nil)else auth : = first auth;while ta (auth) :~: nildo(name = name of auth I go to known auth : = next of auth)od;last auth := next of last auth := auth : =heap auth : = (name, nil, nil);known: skipfi;dotry again:getf (input, ($cCauthor","book","list","find","end","'9, x3Oal,80al$, i));case i in¢ author ¢(getf (input, name); update),¢ book ¢begin getf (input, (name, title)); update;if rb (book of auth) :=: nilthen book of auth : = heap book : = (title, nil)else book : = book of auth;while rb (next of book) : ~: nildo(title = title of bookI go to try again I book : = next of book)od;215
216/van Wijngaarden, et al.ALGOL <strong>68</strong> Revised Report217flend,(title ~ title of bookI next of book : = heap book : = (title, nil))¢ list ¢begin getf (input, name); update;putf (output, ($p" author: "30all$, name));if rb (book := book of auth) :=: nilthen put (output, ("no publications", newline))else on page end (output,(ref file f) bool :(putf (f, ($p" author: "30a41k" continued"ll$, name));true));while rb (book) : ~: nildo putf (output, ($180a$, title of book)); book:= next of bookod;on page end (output, (fertile f) bool : false)flend,¢ find ¢begin getf (input, (Ioc string, title)); auth : = first auth;whlle ra (auth) :~: nildo book := book of auth;while rb (book) : ~: nildoif title = title of bookthen putf (output, ($l"author: "30a$, name of auth));go to try againelse book : = next of bookfiod;auth : = next of authod;put (output, (newline, "unknown", newline))end,11.12. Cooperating sequential processesbegin int nmb magazine slots, nmb producers, nmb consumers;read ((nmb magazine slots, nmb producers, nmb consumers));[1 : nmb producers ] file infile, [1 : nmb consumers ] file outfile;for i to nmb producers do open (infile [ i ], "", inchannel [ i ]) od;¢ 'inchannel' and 'outchannel' are defined in a surroundingrange ¢for i to nmb consumersdo open (outfile [ i ], "", outchannel [ i ]) od;modepage= [1 : 60, 1 : 132] char;[1 : nmb magazine slots] ref page magazine;int ¢ pointers of a cyclic magazine ¢ index : = 1, exdex : = 1;sema full slots = level O, free slots = level nmb magazine slots,in buffer busy = level 1, out buffer busy = level 1;proc par call = (proc (int) void p, int n) void :¢ call 'n' incarnations of 'p' in parallel ¢(n > 01 par (p (n), par call (p, n - 1)));proc producer = tint i) void :do heap page page;get (infile [ i ], page);down free slots; down in buffer busy;magazine [index] : = page;index modab nmb magazine slots plusab 1;up full slots; up in buffer busyod;proc consumer = tint i) void :do page page;down full slots; down out buffer busy;page := magazine [ exdex ];exdex modab nmb magazine slots plusab 1;up free slots; up out buffer busy;put (outfile [ i ], page)od;par (par call (producer, nmb producers),par call (consumer, nmb consumers))endodendesec¢ end ¢(put (output, (new page, "signed off", close)); close (input);goto stop),¢ error ¢(put (output, (newline, "mistake, try again")); newline (input))11.13. Towers of Hanoifork to8do file f: = stand out;proc p = tint me, de, ma) void :if ma > 0 thenp (me, 6 - me - de, ma - 1);putf (f, (me, de, ma));
- Page 2 and 3:
van Wijngaarden, et al.1.1.4.2. Par
- Page 4:
Acknowledgements{Habent sua fata li
- Page 8 and 9:
14 van Wijngaarden, et al.0.3.4. Mo
- Page 10 and 11:
. . . . . . . 4 " ' 0 . . . . . . .
- Page 12 and 13:
22 van Wijngaarden, et al.• let P
- Page 14 and 15:
26 van Wijngaarden, et al.{Since so
- Page 16 and 17:
30 van Wijngaarden, et aLloperandfo
- Page 18 and 19:
34 van Wijngaarden, et al.j) WHETHE
- Page 20 and 21:
38 van Wijngaarden, et al.A protono
- Page 22 and 23:
42 van Wijngaarden, et al.d) If N i
- Page 24 and 25:
46 van Wijngaarden, et al.c) {There
- Page 26 and 27:
50 van Wijngaarden, et al.c) The ph
- Page 28 and 29:
54 van Wijngaarden, et al.3.1.1. Sy
- Page 30 and 31:
58 van Wijngaarden, et al.where (RO
- Page 32 and 33:
62 van Wijngaarden, et al.1) SOlD N
- Page 34 and 35:
66 van Wijngaarden, et al.ALGOL 68
- Page 36 and 37:
70 van Wijngaarden, et el.For each
- Page 38 and 39:
74 van Wijngaarden, et al.If 'MODE"
- Page 40 and 41:
78 J van Wijngaarden, et al.C) SECO
- Page 42 and 43:
82 van Wijngaarden, et al.ALGOL 68
- Page 44 and 45:
86 van Wijngaarden. et al.ALGOL 68
- Page 46 and 47:
90 van Wijngaarden, et al.5.4.4.1.
- Page 48 and 49:
94van Wijngaarden, et al.ALGOL 68 R
- Page 50 and 51:
98 van Wijngaarden, et al.Assignati
- Page 52 and 53:
102 van Wijngaarden, et at.{A nest,
- Page 54 and 55:
106 van Wijngaarden, et al.'HEAD's
- Page 56 and 57:
110 van Wijngaarden, et al.ALGOL 68
- Page 58 and 59: 114van Wijngaarden, et al.ALGOL 68
- Page 60 and 61: 118 van Wijngaarden, et al.ALGOL 68
- Page 62 and 63: 122 van Wijngaarden, et al.style ii
- Page 64 and 65: 126 van Wijngaarden, et al.b) The c
- Page 66 and 67: 130van Wijngaarden, et al.ALGOL 68
- Page 68 and 69: 134van Wijngaarden, et al.ALGOL 68
- Page 70 and 71: 138d)e)f)g)h)i)J)k)1)m)n)van Wijnga
- Page 72 and 73: 142 van Wijngaarden, et al.physics
- Page 74 and 75: 146 van Wijngaarden, et al.gg) On s
- Page 76 and 77: 150van Wijngaarden, et al.ALGOL 68
- Page 78 and 79: 154/van Wijngaarden, et al.ALGOL 68
- Page 80 and 81: 158 van Wijngaarden, et el.fi;ref p
- Page 82 and 83: 162van Wijngaarden, et al.ALGOL 68
- Page 84 and 85: 166van Wijngaarden, et al.ALGOL 68
- Page 86 and 87: 170/van Wijngaarden, etal.ALGOL 68
- Page 88 and 89: 174J)K)L)M)N)O)P)a)b)c)d)e)van Wijn
- Page 90 and 91: 178/van Wijngaarden, et al.ALGOL 68
- Page 92 and 93: 182 van Wijngaarden, et al.• let
- Page 94 and 95: 186van Wijngaarden, et al./ALGOL 68
- Page 96 and 97: 190 van Wijngaarden, etal.composed
- Page 98 and 99: 194h)i)J)van Wijngaa(rden, et al.pr
- Page 100 and 101: 198 van Wijngaarden, et al.¢ strin
- Page 102 and 103: 202tvan Wijngaarden, et al.ALGOL 68
- Page 104 and 105: 206 van Wijngaa~den. et al.10.3.6.1
- Page 106 and 107: 210 van Wijngaarden, et al.!ALGOL 6
- Page 110 and 111: 218fvan Wijngaarden, et al.¢ move
- Page 112 and 113: 222 van Wijngaarden, etaL{overflow}
- Page 114 and 115: 226 van Wijngaarden, et al.ALGOL 68
- Page 116 and 117: 230max int 10.2.1.cmax real 10.2.l.
- Page 118 and 119: 234 van Wijngaarden, et al.ALGOL 68