2011-11-03 12 views
7

Qual è il percorso migliore per un programmatore di stile imperativo esperto che abbia familiarità con le macro C per apprendere il sistema macro Racket. Non solo la meccanica (il come?) Ma anche il dove e il perché utilizzarlo e gli esempi che lo illustrano.Il modo migliore per imparare il sistema Macro Racket per programmatori di stile imperativi

Se uno imparare Scheme (o Lisp) le macro prima? Ho sentito che il libro "On Lisp" ha una buona spiegazione delle macro Lisp con esempi eccellenti del loro uso. Sarebbe utile o no?

+0

Questa domanda è stata posta 3 anni fa e ha ottenuto due buone risposte. Non vedo perché è stato utile metterlo "in attesa", soprattutto perché le persone che lo hanno messo "in attesa" non hanno esperienza in questo settore. –

+0

Questo è quello che mi stavo chiedendo Sam :-) –

+0

Harry, dovresti votare per riaprire questa domanda. –

risposta

6

Racket's documentation ha un excellent tutorial on using macros.

Definitivamente raccomanderei macro Scheme su macro CL se non si ha a che fare con alcun tipo di macro Lisp prima. Questo perché le macro Scheme usano la corrispondenza dei pattern ed è molto più facile da leggere.

Esempio (usando define-syntax-rule del Racket):

(define-syntax-rule (let ((var val) ...) 
         expr ...) 
    ((lambda (var ...) 
    expr ...) 
    val ...)) 

Questo è molto semplice macro che definisce let in termini di creazione di un lambda corrispondente, quindi applicarlo. È facile da leggere e facile da ragionare su ciò che fa.

leggermente più complicato macro:

(define-syntax let* 
    (syntax-rules() 
    ((let*() 
     expr ...) 
    (let() 
     expr ...)) 
    ((let* ((var val) next ...) 
     expr ...) 
    (let ((var val)) 
     (let* (next ...) 
     expr ...))))) 

Questo definisce let* in termini di nidificati let s, in modo che le associazioni sono fatte in sequenza. Include un caso base (senza binding) e un caso ricorsivo.

+0

Potete raccomandare qualsiasi libro per questo. –

+1

Non so su libri, ma racchetta ha un'ottima guida per le macro: http://docs.racket-lang.org/guide/macros.html –

+0

Si consiglia di aggiornare la risposta con questo puntatore, dal momento che è una risposta più diretta alla domanda originale ... –

12

Credo che il miglior tutorial su macro sia ancora "Writing Hygenic macros in Scheme with syntax-case" di Kent Dybvig. Non è specificamente su Racket, ma fondamentalmente tutto verrà trasferito, e leggendo il guide che Chris menzionato sopra coprirà tutte le differenze rimanenti. Nonostante il nome, copre sia macro "hygenic" che "unhygenic".

Edit luglio 2014:

Da quando ho scritto quanto sopra, Greg Hendershott ha scritto un favoloso tutorial su macro in Racket, intitolato Fear of Macros. Ora è il posto migliore per iniziare a conoscere le macro di Racket.

+2

+1 per l'articolo di Dybvig. In realtà l'ho letto qualche tempo fa e mi ha aiutato molto a capire molto bene i macro 'syntax-case', specialmente come ha funzionato' with-syntax'. –

Problemi correlati