Non sono sicuro se si tratta di un bug o di una funzionalità, principalmente perché non sono sicuro che un programmatore elisp sia autorizzato/buona pratica per utilizzare la funzione backquote
, oppure è solo un modo conveniente di definire il funzione. L'output corretto è il primo (e il quarto) output. Guardando il codice per backquote
(in backquote.el
) è chiaro che qualsiasi backquote
all'interno di un file `o backquote
non è stato espanso correttamente. Il codice rilevante per questo è:
((eq (car s) backquote-backquote-symbol)
(backquote-delay-process s (1+ level)))
dove backquote-backquote-symbol
è definito prima come '\ `(quote-backslash-backtick). Ci sono diversi modi di trattare questo errore, ma la linea potrebbe essere quindi:
((or (eq (car s) backquote-backquote-symbol)
(eq (car s) 'backquote))
(backquote-delay-process s (1+ level)))
(o con qualsiasi altra variabile per specificare il backquote simbolo unaliased).
EDIT: Guardando più da vicino, c'è un altro posto dove devi aggiungere anche quel test, ma questo include riportare una patch. Vedrò come lo faccio. Con tale modifica:
ELISP> (macroexpand-all `(a (backquote (b ,x))))
(a
(list 'b x))
ELISP> (macroexpand-all `(a `(b ,x)))
(a
(list 'b x))
fonte
2013-06-30 21:37:48
quelli sono in realtà backtick –
Penso che sia un bug in 'backquote.el'. Vedi il mio commento qui sotto. –