ags@pucc-i (Seaman) (05/17/84)
> Our compiler (M2UNIX for the PDP-11) doesn't allow this program, > complaining as follows: > > 1 MODULE circproc; > 2 > 3 TYPE Circular = PROCEDURE(Circular, CARDINAL): CARDINAL; > **** ^74: type not declared > 4 > 5 PROCEDURE a(b: Circular; x: CARDINAL): CARDINAL; > 6 BEGIN > 7 IF x = 0 THEN > 8 RETURN 1 > 9 ELSE > 10 RETURN x * b(b, x - 1) > 11 END > 12 END a; > 13 > 14 PROCEDURE Factorial(n: CARDINAL): CARDINAL; > 15 BEGIN > 16 RETURN a(a, n) > **** ^128: type incompatibility > 17 END Factorial; > 18 > 19 END circproc. I am not familiar with M2UNIX, but I'll bet it's a one-pass compiler. Volition Systems (also one-pass) gives the same error on line 3 but does not complain about line 16. > > I guess you could do it with two procedures and two definition modules > but ... > > -- > Adrian Pell ({vax135,mcvax,edcaad}!ukc!ru-cs44!adrian) > Computer Science Dept. > University of Reading > UK -- Dave Seaman ..!pur-ee!pucc-i:ags "Against people who give vent to their loquacity by extraneous bombastic circumlocution."
adrian@ru-cs44.UUCP (05/19/84)
Our compiler (M2UNIX for the PDP-11) doesn't allow this program, complaining as follows: 1 MODULE circproc; 2 3 TYPE Circular = PROCEDURE(Circular, CARDINAL): CARDINAL; **** ^74: type not declared 4 5 PROCEDURE a(b: Circular; x: CARDINAL): CARDINAL; 6 BEGIN 7 IF x = 0 THEN 8 RETURN 1 9 ELSE 10 RETURN x * b(b, x - 1) 11 END 12 END a; 13 14 PROCEDURE Factorial(n: CARDINAL): CARDINAL; 15 BEGIN 16 RETURN a(a, n) **** ^128: type incompatibility 17 END Factorial; 18 19 END circproc. I guess you could do it with two procedures and two definition modules but ... -- Adrian Pell ({vax135,mcvax,edcaad}!ukc!ru-cs44!adrian) Computer Science Dept. University of Reading UK
adrian@ru-cs44.UUCP (05/28/84)
Well, actually M2UNIX is a 5-pass compiler, but not all those are concerned with the circular errors. Error occurs on pass 2 -- Adrian Pell ({vax135,mcvax,edcaad}!ukc!ru-cs44!adrian) Computer Science Dept. University of Reading UK