CGOL

From Wikipedia, the free encyclopedia

CGOL
Paradigm procedural, imperative, structured
Appeared in 1976
Designed by Vaughan Pratt
Influenced by ALGOL, FORTRAN, MLisp

CGOL[1][2] (pronounced "see goll") is an alternative syntax for the MACLISP programming language, featuring an extensible algebraic notation. It was created by Vaughan Pratt.

The notation of CGOL is a traditional algebraic notation (sometimes called "infix syntax"), in the style of ALGOL, rather than Lisp's traditional, uniformly-parenthesized syntax. The CGOL parser is based on Pratt's design for top-down operator precedence parsing[3], sometimes informally referred to as a "Pratt parser".

Semantically, CGOL is essentially just MACLISP, with some additional reader and printer support.

[edit] Syntax

Special notations are available for many commonly used MACLISP operations. For example, one can write a matrix multiply routine as:

for i in 1 to n do
  for k in 1 to n do
    (ac := 0;
     for j in 1 to n do
        ac := ac + a(i,j)*b(j,k);
     c(i,k) := ac)

CGOL has an infix . operation (referring to MACLISP's cons function) and the infix @ operation (referring to MACLISP's append function):

a.(b@c) = (a.b)@c

The preceding example corresponds to this text in native MACLISP:

(EQUAL (CONS A (APPEND B C)) (APPEND (CONS A B) C))

CGOL uses of to read and set properties:

'father' of x := 'brother' of relative of y

The preceding example corresponds to this text in native MACLISP:

(PUTPROP X (GET (GET Y RELATIVE) 'BROTHER) 'FATHER)

This illustrates how CGOL notates a function of two arguments:

\x,y; 1/sqrt(x**2 + y**2)

The preceding example corresponds to this text in native MACLISP:

(LAMBDA (X Y) (QUOTIENT 1 (SQRT (PLUS (EXPT X 2) (EXPT Y 2)))))

The syntax of CGOL is data-driven and so both modifiable and extensible.

[edit] References