stringtranslate.com

Expresión M

Juan McCarthy

En programación informática , las M-expresiones (o meta-expresiones ) fueron una sintaxis propuesta en un principio para el lenguaje de programación Lisp , inspirada en lenguajes contemporáneos como Fortran y ALGOL . La notación nunca se implementó en el lenguaje y, como tal, nunca se finalizó. [1]

Las expresiones M son una sintaxis para el código LISP y proporcionan notación de funciones , sintaxis para un condformulario y para datos literales incrustados (a través de expresiones S) en los programas. Por lo tanto, las expresiones M utilizan expresiones S para datos literales. La sintaxis para expresiones S ("El lenguaje de datos") y expresiones M ("El metalenguaje") se define en las páginas 8 y 9 del manual de Lisp 1.5. [2]

Las expresiones M también tenían una representación correspondiente en expresiones S. El código se traducía manualmente de expresiones M a expresiones S. Los datos literales incrustados en las expresiones M debían incluirse entre comillas en las expresiones S.

La forma M-Expresión

append[listvar;(PARÍS BERLÍN NUEVA YORK TOKIO)]

Luego debe transformarse a la forma S-Expresión

(AGREGAR LISTA (CITA (PARÍS BERLÍN NUEVA YORK TOKIO)))

Fondo

John McCarthy publicó el primer artículo sobre Lisp en 1960 mientras era investigador en el Instituto Tecnológico de Massachusetts . En él describió un lenguaje de expresiones simbólicas ( S-expresiones ) que podía representar estructuras complejas como listas. Luego definió un conjunto de operaciones primitivas sobre las S-expresiones y un lenguaje de meta-expresiones (M-expresiones) que podía usarse para definir operaciones más complejas. Finalmente, mostró cómo el propio metalenguaje podía representarse con S-expresiones, lo que dio como resultado un sistema que era potencialmente autoalojado . [3] La versión preliminar de este artículo se conoce como "AI Memo 8". [4]

McCarthy había planeado desarrollar un compilador automático de Lisp ( LISP 2 ) utilizando expresiones M como sintaxis del lenguaje y expresiones S para describir los procesos internos del compilador. Stephen B. Russell leyó el artículo y le sugirió que las expresiones S eran una sintaxis más conveniente. Aunque McCarthy desaprobó la idea, Russell y su colega Daniel J. Edwards codificaron a mano un programa intérprete que pudiera ejecutar expresiones S. [2] Este programa fue adoptado por el grupo de investigación de McCarthy, estableciendo las expresiones S como la forma dominante de Lisp.

McCarthy reflexionó sobre el destino de las expresiones M en 1979:

El proyecto de definir expresiones M con precisión y compilarlas o al menos traducirlas en expresiones S no se finalizó ni se abandonó explícitamente. Simplemente quedó relegado a un futuro indefinido y apareció una nueva generación de programadores que preferían la notación interna a cualquier notación tipo FORTRAN o ALGOL que pudiera concebirse. [5]

—  Historia de Lisp

El libro Anatomía de LISP de John Allen explica la definición de expresiones M y las utiliza a lo largo del libro para explicar Lisp y su implementación. [6]

Ejemplos

Las definiciones de las funciones apply y eval del Manual de Lisp 1.5, página 13.

aplicar[fn;x;a] = [átomo[fn] → [eq[fn;CAR] → caar[x]; eq[fn;CDR] → cdar[x]; eq[fn;CONS] → cons[car[x];cadr[x]]; eq[fn;ÁTOMO] → átomo[car[x]]; eq[fn;EQ] → eq[car[x];cadr[x]]; T → aplicar[eval[fn;a];x;a]]; eq[car[fn];LAMBDA] → eval[caddr[fn];parlis[cadr[fn];x;a]]; eq[car[fn];ETIQUETA] → aplicar[caddr[fn];x;cons[cons[cadr[fn];caddr[fn]];a]]]
evaluar[e;a] = [átomo[e] → cdr[asociado[e;a]]; átomo[coche[e]] → [eq[coche[e],CITA] → cadr[e]; eq[car[e];COND] → evcon[cdr[e];a]; T → aplicar[car[e];evlis[cdr[e];a];a]]; T → aplicar[car[e];evlis[cdr[e];a];a]]

Usando la función eval en una expresión s.

eval[(EQ (CITA A) (CAR (CONS (CITA A) (CITA (BCD)))));NIL]

Implementaciones

Para LISP

MLisp fue un proyecto contemporáneo (1968-1973) para implementar una interfaz de usuario similar a las expresiones M para Lisp. Se incorporaron algunas características adicionales como macros higiénicas , coincidencia de patrones y retroceso . Con el tiempo, evolucionó hasta convertirse en un borrador abandonado de LISP70. M-LISP (MetaLISP) de 1989 fue otro intento de combinar las expresiones M con Scheme. [7]

Hay disponible en Common Lisp un analizador para la expresión M " AI Memo 8" , pero el autor lo utiliza como argumento contra las expresiones M debido a su aparente incapacidad para manejar macros. [8]

Desarrollo adicional

Se implementó un CGOL (1977) en MacLisp y sigue un objetivo similar de introducir una sintaxis similar a Algol con operadores infijos. [7] Se sabe que funciona en Armed Bear Common Lisp . [9]

Una variante más reciente (circa 2003) es la expresión I , que utiliza sangría para indicar paréntesis implícitamente y, por lo tanto, en cierto modo son intermedias entre las expresiones S y las expresiones M. Las expresiones I se introdujeron en Scheme Request For Implementation 49 como una sintaxis auxiliar para Scheme , pero no se han adoptado ampliamente. [10]

Un desarrollo posterior es la expresión t "dulce" , que tiene operadores infijos sin precedencia. Al igual que las expresiones I, las expresiones t son sólo una transformación simple de las expresiones S, de modo que teóricamente se pueden usar en cualquier dialecto Lisp y no interfieren con funciones como las macros. [11]

Otras sintaxis relacionadas incluyen Dylan de Apple (tokens similares a Algol) y la incorporación de otras sintaxis literales por parte de Clojure . [7]

Notas


Referencias

  1. ^ "La implementación de LISP". www-formal.stanford.edu . Consultado el 29 de marzo de 2020 .
  2. ^ abc "LISP 1.5 Programmer's Manual" (PDF) . Community.computerhistory.org. 1965. Archivado desde el original (PDF) el 2006-02-11 . Consultado el 2013-09-02 .
  3. ^ McCarthy, John (abril de 1960) "Funciones recursivas de expresiones simbólicas y su cálculo por máquina, parte I"
  4. ^ McCarthy, John (marzo de 1959). "Funciones recursivas de expresiones simbólicas y su cálculo por máquina (AI Memo 8)".
  5. ^ "La implementación de LISP". Formal.stanford.edu. 12 de febrero de 1979. Consultado el 24 de agosto de 2013 .
  6. ^ "Anatomía de LISP". McGraw-Hill, Inc. 1978.
  7. ^ abc Lee, Xah. "Estudio de sintaxis infija de LISP".
  8. ^ "Un analizador para expresiones M". Los principiantes pueden probarlas y ver lo poco prácticas que son. Observe, por ejemplo, que ya no podemos usar macros porque el analizador de expresiones M tendría que conocer su sintaxis.
  9. ^ CGOL sobre el desarrollo de ABCL del blog de implementación de Common Lisp de Armed Bear.
  10. ^ Möller, Egil (2003). "SRFI 49: sintaxis sensible a sangría". srfi.schemers.org .
  11. ^ Wheeler, DA (2013). "SRFI 110: Expresiones dulces (expresiones t)". srfi.schemers.org .