Pregunta

No es de las analogías con el Esquema de define-syntax en ELisp?En define-syntax Puedo especificar algunas de las palabras clave y en elisp defmacro parece que me cant.EDITAR:Parece que no se entiende bien, o mi pregunta no es clara.En el esquema es posible definir un macro con palabras reservadas como

(bucle for un in algunos de la lista

(bucle while

En Emacs Lisp no he hallado la manera de introducir el azúcar.En la mayoría, que puedo hacer para macro, que debe ser llamado como

(loop-para una lista de (hacer-un montón de cosas...)

La legibilidad de los asuntos

¿Fue útil?

Solución

Tanto el Esquema y la Elisp tienen los sistemas de macro.Las "palabras clave" define-syntax y defmacro tanto introducir un nombre para un usuario de macro definido.

En el momento en que una macro, foo, se utiliza en el código real, dicen (foo 1 bar) la macro expansor debe determinar cómo reescribir la forma, (foo 1 bar), en una forma más simple que no contienen macros de usuario.La macro expansor llama a la función que se define en el momento de la macro foo fue definido.I. e.se llama a la función especificada con define-syntax o defmacro con una representación de la forma, (foo 1 bar).La representación puede ser como "la sintaxis de objetos" o en formato de listas (esto varía en los diferentes sistemas de macro).

Esta es mi opinión sobre las similitudes entre define-syntax y defmacro.

La macro de los sistemas de R5RS Esquema y Elisp son diferentes, aunque.

La macro expansor asociados con foo puede en R5RS Esquema se especifica con la ayuda de syntax-rules.Esto permite que usted utilice la coincidencia de patrón para especificar las reglas de reescritura (internamente la sintaxis de las reglas de forma evaluará a la función).Otras diferencias:La expansión de macro algoritmo en R5RS Esquema de ayudarlo contra inadvertidamente introducir los nombres de chocando con los nombres de otras partes de su programa (por decir de una biblioteca, no escribir su auto).Históricamente Debido a la forma en que los espacios de nombres de obras en Lisp, este problema no es gran cosa en Lisp, pero es posible cometer errores.

Históricamente Esquema y Elisp ambos utilizan la misma expansión de macro algoritmo, pero entonces los Conspiradores comenzó a experimentar con otros algoritmos.La "sintaxis de las reglas de" sistemas se introdujo en R5RS, pero la evolución no se detiene allí.En estos días todo el moderno Esquema de implementación han (variantes) de la sintaxis "caso" del sistema.

Algunos de implementación han hecho el trabajo para hacer de esta expansión algoritmo de trabajo con los módulos (Raqueta, R6RS-implementaciones, y otros).

En resumen, cuando usted lea acerca de Esquema de los sistemas de macro, cuidar a examinar precisamente la variante que usted está leyendo.Si usted está leyendo acerca de las restricciones, entonces lo más probable es que usted ha encontrado un texto en el (ahora más bien viejo) syntax-rules sistema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top