macros - En Common Lisp, ¿cómo definir una macro expandiéndose a nada(en lugar de `nil`)?
common-lisp (2)
Quiero definir una macro que pueda comentar una expresión s, por ejemplo:
espero que
(list 1 2 (comment-macro (something))) -> (1 2)
Pero si defino la macro como esta
(defmacro comment-macro (x))
el resultado de la forma anterior es en realidad
(1 2 nil)
En Common Lisp, no hay forma de definir una macro que se expande a nada. El valor primario devuelto por la macro (es decir, la función de macro ) siempre se inserta en lugar de la macro llamada.
No puede lograr lo que desea con una macro normal porque siempre se usará su valor principal (o nil
si no se devuelve ningún valor).
Sin embargo, hay dos opciones comunes:
expresiones de características:
#+(or) ...
o#-(and) ...
- para deshabilitar (temporalmente) el código
También puede definir sus propias macros de lectura utilizando set-macro-character
y set-dispatch-macro-character
.