La modificación del lector permitiría introducir una nueva sintaxis de lectura (como #(hash table)
y '(quoted)
). Muchos Lisps tienen esta capacidad, pero no parece existir tal facilidad para elisp.
La modificación del lector permitiría introducir una nueva sintaxis de lectura (como #(hash table)
y '(quoted)
). Muchos Lisps tienen esta capacidad, pero no parece existir tal facilidad para elisp.
Respuestas:
Resulta que el manual implica que no puedes hacer macros de lector.
De acuerdo con el Apéndice C Porting Common Lisp :
Lector de macros. Common Lisp incluye un segundo tipo de macro que funciona a nivel de caracteres individuales. Por ejemplo, Common Lisp implementa la notación de citas mediante una macro de lector llamada ', mientras que el analizador de Emacs Lisp solo trata las citas como un caso especial. Algunos paquetes de Lisp usan macros de lector para crear sintaxis especiales para ellos, que el analizador de Emacs no puede leer.
syntax.c
, también ...
Aparentemente se puede hacer, pero prepárate para mucho trabajo. (o no, porque lo abordaré algún fin de semana ;-).
(defvar *orig-read* (symbol-function 'read))
(defun read (&optional in)
(message "reading from %s" load-file-name)
(funcall *orig-read* in))
(setq load-read-function (symbol-function 'read))
Ahora "todo" que queda por hacer es implementar un lector Lisp completo que admita todo lo que Elisp hace y lo que quiera más. Creo que esto podría usarse para proporcionar defpackage
símbolos internos tipo CL y de paquete, como un ejemplo. Además, una sintaxis especial para expresiones regulares es algo que realmente quiero hacer (o más exactamente, alguna sintaxis de cadena que no interpreta barras invertidas).
Editar: aquí hay una implementación de prueba de concepto: https://github.com/mishoo/elisp-reader.el