[plt-scheme] Applying DRY in macros
danprager at optusnet.com.au
danprager at optusnet.com.au
Sat Sep 13 17:35:38 EDT 2008
Thanks Jens. I was wondering whether syntax-case -- which I haven't yet come to grips with -- might hold some clues to writing macros more briefly and clearly, so your rewrite is welcome:
> Here is an alternative:
>
> (define-syntax (for stx)
> (define (template var list-expr bodies)
> #`(map (lambda (#,var) #, at bodies) #,list-expr))
> (syntax-case stx (in as)
> [(for element in list body ...)
> (template #'element #'list #'(body ...))]
> [(for list as element body ...)
> (template #'element #'list #'(body ...))]))
In this instance, however, it looks to me as if the amount of duplication has remained the same, while the apparent complexity -- #`, #,@, #' -- has increased. Compare with the earlier:
(define-syntax for
(syntax-rules (in as)
((for element in list body ...)
(map (lambda (element)
body ...)
list))
((for list as element body ...)
(for element in list body ...))))
which I was hoping could be improved on.
Thanks again
Dan
More information about the plt-scheme
mailing list