CGOL [1] [2] (pronunciado "see goll" ) es una sintaxis alternativa que presenta una notación algebraica extensible para el lenguaje de programación Lisp . Fue diseñado para MACLISP por Vaughan Pratt y posteriormente portado a Common Lisp . [3]
Paradigma | procedimental , imperativo , estructurado |
---|---|
Diseñada por | Vaughan Pratt |
Apareció por primera vez | 1973 |
Influenciado por | |
ALGOL , FORTRAN , MLisp |
La notación de CGOL es una notación infija tradicional , al estilo de ALGOL , en lugar de la sintaxis de notación de prefijo uniformemente entre paréntesis tradicional de Lisp . El analizador CGOL se basa en el diseño de Pratt para el análisis de precedencia de operadores de arriba hacia abajo , [4] [5] a veces denominado informalmente " analizador de Pratt ".
Semánticamente, CGOL es esencialmente Common Lisp, con algún soporte adicional para lectores e impresoras.
CGOL puede considerarse como una encarnación más exitosa de algunas de las ideas esenciales detrás del proyecto LISP 2 anterior . Lisp 2 fue un sucesor de LISP 1.5 que tenía como objetivo proporcionar sintaxis ALGOL. LISP 2 se abandonó, mientras que en la actualidad es posible utilizar la base de código CGOL. Esto se debe a que, a diferencia de LISP 2, CGOL se implementa como funciones portátiles y macros escritas en Lisp, que no requieren alteraciones en la implementación de Lisp del host.
Sintaxis
Hay notaciones especiales disponibles para muchas operaciones Common Lisp de uso común. Por ejemplo, se puede escribir una rutina de multiplicación matricial como:
porque yo en 1 an do para k en 1 an do (ac: = 0; para j en 1 an do ac: = ac + a (i, j) * b (j, k); c (i, k): = ac)
CGOL tiene una .
operación infija (refiriéndose a la cons
función de Common Lisp ) y la @
operación infijo (refiriéndose a la append
función de Common Lisp ):
a. (b @ c) = (ab) @c
El ejemplo anterior corresponde a este texto en Common Lisp nativo:
( IGUAL ( CONS A ( APÉNDICE B C )) ( APÉNDICE ( CONS A B ) C ))
CGOL utiliza of
para leer y establecer propiedades:
'padre' de x: = 'hermano' del pariente de y
El ejemplo anterior corresponde a este texto en Common Lisp nativo:
( PUTPROP X ( OBTENER ( OBTENER Y FAMILIAR ) 'HERMANO ) ' PADRE )
Esto ilustra cómo CGOL nota una función de dos argumentos:
\ x, y; 1 / sqrt (x ** 2 + y ** 2)
El ejemplo anterior corresponde a este texto en Common Lisp nativo:
( LAMBDA ( X Y ) ( COCIENTE 1 ( SQRT ( MÁS ( EXPT X 2 ) ( EXPT Y 2 )))))
La sintaxis de CGOL se basa en datos y, por lo tanto, es modificable y extensible.
Estado y código fuente
Se sabe que CGOL trabaja en Armed Bear Common Lisp . [6]
El código fuente CGOL y algunos archivos de texto que contienen discusiones sobre él están disponibles como software gratuito en el Repositorio de Inteligencia Artificial de la Universidad Carnegie-Mellon . [3]
Referencias
- ^ Pratt, Vaughan R. CGOL: una representación externa alternativa para los usuarios de LISP. Documento de trabajo de AI 121. Laboratorio de inteligencia artificial del MIT (Cambridge, MA). 1976.
- ^ Pratt, Vaughan R. CGOL: una notación algebraica para usuarios de MACLISP. 27 de enero de 1977.
- ^ a b CGOL: lenguaje similar a Algol que se compila en Common Lisp
- ^ Pratt, Vaughan R. Precedencia del operador de arriba hacia abajo. Actas del Simposio ACM sobre principios de lenguajes de programación . 1973. pp41–51.
- ^ Van De Vanter, Michael L. Una prueba de formalización y corrección del sistema de lenguaje CGOL (tesis de maestría). Informe técnico del Laboratorio de Ciencias de la Computación del MIT MIT-LCS-TR-147 (Cambridge, MA). 1975.
- ^ CGOL en ABCL Desarrollo del blog de implementación Armed Bear Common Lisp .