2011-11-03 18 views
7

¿Cuál es la mejor ruta para un programador de estilo imperativo con experiencia que solo esté familiarizado con las macros C para aprender el sistema macro Racket. No solo su mecánica (¿cómo?) Sino también el dónde y el por qué usarlo y ejemplos que ilustran esto.La mejor manera de aprender el sistema Racket Macro para programadores de estilo imperativo

¿Debería uno aprender primero las macros Scheme (o Lisp)? He oído que el libro "On Lisp" tiene una buena explicación de las macros de Lisp con excelentes ejemplos de su uso. ¿Esto sería útil o no?

+0

Esta pregunta se formuló hace 3 años y obtuvo dos buenas respuestas. No veo por qué ponerlo "en espera" fue útil, especialmente porque las personas que lo ponen "en espera" no tienen ninguna experiencia en esta área. –

+0

Eso es lo que me preguntaba Sam :-) –

+0

Harry, debes votar para volver a abrir esta pregunta. –

Respuesta

6

Racket's documentation tiene excellent tutorial on using macros.

Definitivamente recomendaría las macros Scheme sobre las macros CL si no ha tratado anteriormente con ningún tipo de macros Lisp. Esto se debe a que las macros de Scheme usan la coincidencia de patrones, y es mucho más fácil de leer.

Ejemplo (usando define-syntax-rule de raqueta):

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

Esta es una macro muy simple que define let en términos de creación de un lambda correspondiente, a continuación, aplicarlo. Es fácil de leer y fácil de razonar sobre lo que hace.

ligeramente más complicado macro:

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

Esto define let* en términos de anidados let s, de modo que los enlaces se realizan secuencialmente. Incluye un caso base (sin enlaces), así como un caso recursivo.

+0

¿Puede recomendar algún libro para esto? –

+1

No sé sobre libros, pero Racket tiene una excelente guía para macros: http://docs.racket-lang.org/guide/macros.html –

+0

Debe actualizar la respuesta con este puntero, ya que es una respuesta más directa a la pregunta original ... –

12

Creo que el mejor tutorial sobre macros sigue siendo Kent Dybvig's "Writing Hygenic macros in Scheme with syntax-case". No se trata específicamente de Racket, pero básicamente todo se llevará a cabo, y leer el guide que Chris mencionó anteriormente cubrirá las diferencias restantes. A pesar del nombre, cubre tanto macros "hygenic" como "no higiénicas".

edición de julio de 2014:

Desde que escribí lo anterior, Greg Hendershott ha escrito un tutorial fabuloso en macros en la raqueta, titulado Fear of Macros. Ese es ahora el mejor lugar para comenzar a aprender sobre las macros de Racket.

+2

+1 para el artículo de Dybvig. Lo he leído hace un tiempo y me ayudó a entender mucho las macros 'sintaxis-case', especialmente cómo funcionan cosas como' with-syntax'. –

Cuestiones relacionadas