2015-01-15 9 views
6

In Common Lisp, esistono ovviamente alcuni caratteri speciali che fungono da scorciatoie per determinate forme. 'x significa (quote x). #'f significa (function f). Avevo pensato che quelli (e anche il backtick) erano gli unici, ma poi ho imparato a conoscere #(), che a quanto pare è un vettore, e solo oggi qualcuno ha menzionato lo #., che a quanto pare fa qualcosa con il tempo di valutazione.Comune Lisp caratteri di scelta rapida speciali

Per quanto possibile, non riesco a trovare un elenco completo di quali simboli di prefisso significano qualcosa e cosa fanno? Questo è qualcosa che è stato lasciato all'implementazione per decidere, o qualcuno potrebbe indicarmi un punto dello standard che elenca queste scorciatoie in modo completo?

+0

C'è solo un elenco completo nello standard, ma è possibile definire nuovi caratteri macro in qualsiasi momento. –

+0

Beh, questa è una novità per me. Qual è il nome della chiamata che devo fare per definire la mia? –

+2

Sto mettendo insieme una risposta, ma inizia dando un'occhiata al capitolo [17 Leggi macro] (http://dunsmor.com/lisp/onlisp/onlisp_21.html) da ** On Lisp **. Puoi anche trovare [la mia risposta] (http://stackoverflow.com/a/19321377/1281433) a [Come definire i simboli che funzionano come (e) dalla macro dei simboli?] (Http://stackoverflow.com/ q/19319277/1281433) utile. –

risposta

9

L'HyperSpec, in 2.4 Standard Macro Characters, enumera "i caratteri macro definiti inizialmente in un'implementazione conforme". È possibile definire il proprio utilizzando ', che gestisce i tipi come ' che non hanno alcun "prefisso" e set-dispatch-macro-character, che gestisce il tipo preceduto da un carattere di invio (in genere #).

Oltre a HyperSpec, è possibile trovare Chapter 17, Read Macros da Paul Graham su Lisp utile. Inizia con un'implementazione di ', ovvero il carattere macro che si espande in (quote ...). Anche le risposte a How to define symbols that will work like (and) by symbol macro? sono utili, in quanto vi sono alcuni usi di set-macro-character.