Originalmente, se suponía que las expresiones M (o meta -expresiones ) en la programación se usarían para escribir funciones en Lisp . Los datos procesados con expresiones M se escribieron utilizando expresiones S. Las expresiones M se usaron en el lenguaje teórico original descrito en los primeros artículos de Lisp; sin embargo, en la primera implementación funcional de Lisp, las expresiones M se codificaron como expresiones S y el traductor de expresiones M nunca se implementó.
El proyecto para definir con precisión las expresiones M y compilarlas, o al menos traducirlas a expresiones S, nunca se completó o se abandonó explícitamente. Simplemente se archivó indefinidamente, y una nueva generación de programadores descubrió que preferían la notación interna a cualquier notación de programa de estilo FORTRAN o ALGOL que se les ocurriera.
Texto original (inglés)[ mostrarocultar]El proyecto de definir las expresiones M con precisión y compilarlas o al menos traducirlas a expresiones S no se finalizó ni se abandonó explícitamente. Simplemente retrocedió hacia un futuro indefinido, y apareció una nueva generación de programadores que prefirieron la notación interna a cualquier notación similar a FORTRAN o ALGOL que pudiera diseñarse.
- John McCarthy [1] , Historia de LispLas expresiones S son datos formados únicamente por átomos y pares . Inicialmente, el átomo se describía como un carácter en mayúscula y los pares estaban delimitados por paréntesis. También se describió la notación abreviada para listas , aunque inicialmente los elementos de las listas estaban separados por comas, no por espacios . Una entrada de ejemplo (usamos espacios, no comas):
((A B C D E F))es una lista de tres elementos, cada uno de los cuales es una lista de dos caracteres.
Una expresión M también puede usar nombres de operadores, metavariables y listas de argumentos. Los nombres de operadores y metavariables se dieron en minúsculas para indicar que no son símbolos (datos). Las listas de argumentos estaban delimitadas por corchetes, []y sus elementos estaban separados por punto y coma. Por ejemplo:
coche[contras[(A . B); X]]es una operación de dos partes:
La descripción original de Lisp publicada por McCarthy, donde se presenta como un lenguaje universal teórico, describe una función evalque toma como entrada expresiones S, convirtiéndolas a la forma de expresiones M, y también ejecuta programas en forma de M-. expresiones que están codificadas como expresiones S. Aquí hay algunos ejemplos de expresiones M y su conversión a expresiones S (nuevamente usando la notación de lista moderna):
Se planeó que la implementación original de Lisp fuera un proceso muy largo, ya que los compiladores tardaron años en escribir en ese momento. La implementación comenzó con la compilación manual de ciertas funciones, mientras que el sublenguaje de expresión M aún era preliminar. Sin embargo, Steve Russell y Daniel J. Edwards se dieron cuenta de que la implementación evalfuncionaría como una implementación completa del intérprete Lisp usando expresiones S. [2] La compilación manual de la función evalresultó ser una tarea muy simple en comparación con los años de construcción esperada del compilador. La comunidad de programadores que utilizan expresiones S ha crecido rápidamente. Las expresiones M se abandonaron y no recibieron una implementación común para toda la familia de lenguajes Lisp.
Si bien es inusual que los programadores de Lisp propongan formas alternativas del lenguaje ( MLISP es uno de los pocos ejemplos ), algunos usan expresiones M. Pero tales dialectos pierden la uniformidad de las expresiones S, lo que se considera un punto importante para la expresividad del idioma. Como resultado, las expresiones S siguen siendo la sintaxis principal (o única) en prácticamente todos los dialectos comunes de Lisp. Las excepciones incluyen el lenguaje Logo , que puede considerarse (con algunas libertades) como Lisp basado en expresiones M. Algunos otros lenguajes de programación, como Dylan y Ruby , toman mucho de Lisp, pero usan una sintaxis similar a ALGOL que difiere tanto de las expresiones S como de las expresiones M.
También hay una implementación de Common Lisp del intérprete M-LISP que también evalúa expresiones M.
La sintaxis del lenguaje funcional ML ( English Metalenguaje , "metalenguaje" ) es similar a la sintaxis de las M-expresiones ( "metaexpresiones" ), también se basa en notación matemática. Sin embargo, la presencia de conceptos adicionales en ML, como anotaciones de tipo y expresiones regulares, enmascara esta similitud.
La sintaxis, similar a las expresiones M originales, usa el lenguaje del sistema Mathematica , las listas en él se escriben usando corchetes (también puede usar la notación de expresión M para ellas), y las expresiones M se usan para escribir funciones.
Una variación reciente de este tema son las expresiones I , en las que la sangría desempeña el papel de paréntesis implícitos (como en Python ). Por lo tanto, son un cruce entre expresiones S y expresiones M. En SRFI Query dichas expresiones I se propusieron como una sintaxis adicional para el lenguaje Scheme pero no se adoptaron ampliamente.
Ceceo | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Características |
| ||||||||||||||
Implementaciones |
| ||||||||||||||
Hardware |
| ||||||||||||||
Comunidad |
| ||||||||||||||
|