CGOL
From Wikipedia, the free encyclopedia
| CGOL | |
|---|---|
| Paradigm | procedural, imperative, structured |
| Appeared in | 1976 |
| Designed by | Vaughan Pratt |
| Influenced by | ALGOL, FORTRAN, MLisp |
CGOL (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, 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
- ^ Pratt, Vaughan R. CGOL: An Alternative External Representation for LISP Users. AI Working Paper 121. MIT Artificial Intelligence Laboratory (Cambridge, MA). 1976.
- ^ V.R. Pratt. CGOL - an Algebraic Notation For MACLISP users. January 27, 1977.
- ^ Pratt, V.R., Top Down Operator Precedence. Proceedings of the ACM Symposium on Principles of Programming Languages. 1973. pp41-51.

