Algol68g-1.18.0

Version of implementation Genie Algol68g of programming language Algol68

What is new in Algol 68 Genie Version 1.18.0?

  1. Regression fixes: · Rowing failed for some flexible rows, · Generator failed for some structures, · Garbage collector could crash under rare circumstances, · Some flexible mode declarations were not accepted, · Some modes were incorrectly marked as equivalent, · Unnecessary size limitations in some matrix operations, · Build error on MacOS X, · Alignment error on AMD64.
  2. Adds NEW as alternative to HEAP.
  3. More efficient use of memory during compilation.
  4. Documentation updates.
  5. Upon request, re-post the HTML translation of the Revised Report.
  6. Change to a common Linux-style version numbering (former Mark j will now read Version 1.j.0, and former Mark j.k will now read Version 1.j.k).

ALGOL 68 Dragon curve animated
ALGOL 68 Dragon curve animated

Examples:

Hello, World! - Algol68 (107):

Note the use of printf with the formatting being described between dollars. eg $gl$ — meaning “g”eneral pattern, then new “l”ine.

( 
  printf(($gl$,"Hello, world!"))
)

Factorial - Algol68 (108):

This 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
;

Quadratic equation - Algol68 (163):

A direct translation of the C++ example.

PROC print root = (INT ind, LONG COMPL x)VOID:
(   print(("x", ind, " := "));
    IF ABS(im OF x) < 1E-6 THEN
        print((re OF x, new line))
    ELSE print((x, new line))
    FI
);

main:
(   LONG COMPL a, b, c, d, x1, x2;
    print(("a := "));
    read((a));
    IF ABS a <1E-3 THEN
        print(( "Not a quadratic equation", new line));
        stop
    FI;
    print(("b := "));
    read((b));
    print(("c := "));
    read((c));

    a *:= 2;
    d := b*b-a*c*2.0;
    IF ABS d <1E-3 THEN
        print(("x := ", re OF (-b/a)))
    ELSE
        print root(1, (-b+long complex sqrt(d))/a);
        print root(2, (-b-long complex sqrt(d))/a)
    FI
)