[gambit-list] Request: examples of cool uses of macros

Marc Feeley feeley at iro.umontreal.ca
Fri Jan 25 10:30:27 EST 2013


On 2013-01-25, at 9:47 AM, Jason Felice <jason.m.felice at gmail.com> wrote:

> Hi!
> 
> Does anyone have any examples of macros which drastically improve readability or simplicity of code?  Maybe neat hacks?
> 
> Not deep hacks that take a long time to understand, but things which can be used to illustrate why macros are powerful and awesome.
> 
> Background:
> 
> I'm giving a talk tomorrow on Scheme to prisoners in a job training program. The purpose is to expand their brains by exposing them to concepts they haven't seen before (they don't have Internet access).
> 
> The talk is about Scheme and "Code is Data".  I've laid the foundation, but am getting to the point where I want to have some flashy and interesting uses of macros.
> 
> Any help would be appreciated.
> 

Here's a favourite of mine, which I teach in class, and which brings me back to my years learning Pascal.  It allows you to write for loops like this:

  (for i := 1 to 10 do (println (* i i)))

The definition is:

(define-macro (for variable _1 expr1 _2 expr2 _3 expr3)
  `(let ((start ,expr1)
         (end ,expr2)
         (body (lambda (,variable) ,expr3)))

     (define loop
       (lambda (i)
         (if (<= i end)
             (begin (body i) (loop (+ i 1))))))

     (loop start)))

Marc





More information about the Gambit-list mailing list