Come creare una macro Lisp

March 12

Come creare una macro Lisp


Si può crescere ed estendere la potenza del linguaggio di programmazione Lisp attraverso l'uso di macro. macro Lisp applicano un nome a una combinazione di parti esistenti del linguaggio Lisp, librerie Lisp o funzioni che si scrive per creare una nuova caratteristica del linguaggio che valuterà come qualsiasi altro componente linguaggio Lisp. Le macro sono una forma di stenografia --- quando si valuta una macro, l'interprete si espande la macro nel codice che incapsula, poi esegue il codice. Un esempio di una macro Lisp è possibile creare un programma di utilità di conversione di temperatura Fahrenheit a Celsius. Questo esempio mostra come una macro può combinare un'altra macro e una funzione Lisp.

istruzione

1 Avviare il terminale di linea di comando facendo clic sul pulsante "Start" e cliccando sul menu "Esegui". Tipo "comando" nella casella di input, quindi fare clic su "OK".

2 Avviare l'interprete Common Lisp digitando "CLISP" al prompt dei comandi. Premere il tasto "Enter".

3 Digitare il codice per la prima parte della domanda al prompt dei comandi Lisp. La vostra nuova macro consiste in un altro chiamato Rapporto macro. Il comando defmacro crea la macro, che contiene la pendenza del terreno di Celsius rispetto a Fahrenheit.

(Rapporto defmacro () (/ 5.0 9.0))

4 Inserisci il codice per la seconda parte della macro al prompt dei comandi Lisp. La funzione "diff" sottrae 32 dalla temperatura in gradi Fahrenheit.

(Defun diff (x) (- 32,0 x))

5 Inserisci il codice per la parte finale della macro al prompt dei comandi Lisp. La macro "fc" accetta la temperatura in gradi Fahrenheit, lo moltiplica per il rapporto, lo moltiplica per "diff", quindi stampa il risultato.

(Fc defmacro (x) (* (rapporto) (diff x)))

6 Testare la macro digitando "(fc 98,6)" al prompt dei comandi Lisp. L'interprete deve stampare 37.0, che è 98,6 o temperatura corporea in gradi Celsius.

Consigli e avvertenze

  • È possibile scrivere il codice Lisp con un editor di testo e caricarlo nella interprete Common Lisp. Inserire il seguente codice nel vostro editor di testo digitando o selezionando il codice con il mouse, premendo il tasto "Ctrl" plus "C", quindi incollandolo nell'editor con un comando "Ctrl" plus "V".
  • (Rapporto defmacro () (/ 5.0 9.0))
  • (Defun diff (x) (- 32,0 x))
  • (Fc defmacro (x) (* (rapporto) (diff x)))
  • Salvare il file con il nome "test.lisp" e riavviare il interprete Common Lisp. Al prompt dei comandi Lisp, digitare la seguente riga quindi premere il tasto "Enter":
  • (Carico "test.lisp")
  • Se si ottiene il messaggio di errore "defun / defmacro (rapporto): # <Pacchetto comune-LISP> è bloccato", ". Inserire" tipo "(continua)" nella riga di comando e premere Infine, digitare "(fc 110)" al prompt dei comandi e premere "Invio". Il risultato dovrebbe essere 43,333,336 mila.
  • Un tipico programma di Lisp può avere molti livelli di parentesi nidificate. Se si omette una parentesi, il programma non verrà eseguito. È possibile evitare parentesi mancante per la scrittura e la modifica dei programmi in un editor di testo. Un altro modo di evitare errori di programmazione è quello di diffondere il proprio codice su più righe e utilizzare il rientro per impostare le unità logiche parte di codice. Ad esempio, la macro "fc" è più facile da seguire ed eseguire il debug se si digita in quanto al di sotto (omettere i periodi, che ci sono per il corretto posizionamento):
  • (Fc defmacro (x)
  • .... (*
  • .......(rapporto)
  • ....... (Diff x)
  • .....)
  • )