Malvern Algol68 to C
Implementation of programming language Algol68This Algol 68RS compiler developed by the UK Defence Research Agency. It implements almost all of the language known as Algol 68, and extends that language in minor respects. This version of the 68RS compiler generates code in the programming language ‘C’, which then can be compile and run on Intel based linux.
Examples:
Factorial:
Example for versions Algol68g-1.18.0, Algol68toc-1.8This example uses recursive factorial definition with first 7 numbers precomputed.
PROC factorial = (INT n)LONG LONG INT:
CASE n+1 IN
1,1,2,6,24,120,720 # a brief lookup #
OUT
n*factorial(n-1)
ESAC
;
Fibonacci numbers:
Example for versions Algol68g-1.18.0, Algol68toc-1.8Generative method. This code specimen uses a callback to generate the sequence on demand.
MODE YIELDINT = PROC(INT)VOID;
PROC fibonacci = (INT n, YIELDINT yield)VOID: (
INT even:=0, odd:=1;
yield(even);
yield(odd);
FOR i FROM odd+1 TO n DO
yield( (ODD i|odd|even) := odd + even )
OD
);
main:(
# FOR INT n IN # fibonacci(16, # ) DO ( #
## (INT n)VOID:(
print((" ",whole(n,0)))
)); # OD #
print(new line)
)
Fibonacci numbers:
Example for versions Algol68g-1.18.0, Algol68toc-1.8Analytic method
PROC analytic fibonacci = (INT n)INT:(
REAL sqrt 5 = sqrt(5);
REAL p = (1 + sqrt 5) / 2;
REAL q = 1/p;
ENTIER( (p**n + q**n) / sqrt 5 )
);
FOR i FROM 0 TO 16 WHILE
print(whole(analytic fibonacci(i),0));
# WHILE # i /= 16 DO
print(", ")
OD;
print(new line)
Comments
]]>blog comments powered by Disqus
]]>