Loading

Paste #pxdcftqry

  1.   (define r7rs-library
  2.     (lambda (orig)
  3.       (syntax-case orig ()
  4.     [(_ name body ...)
  5.      (let loop ((body** (syntax->datum #'(body ...) ))
  6.             (import* '())
  7.             (export* '())
  8.             (form* '()))
  9.        (if (null? body**)
  10.            #`('library name
  11.            (export #,@export*)
  12.            (import #,@import*)
  13.            #,@form*)
  14.            (case (caar body**)
  15.          ((import) (loop (cdr body**)
  16.                  (append (cdar body**) import*)
  17.                  export*
  18.                  form*))
  19.          ((export) (loop (cdr body**)
  20.                  import*
  21.                  (append (cdar body**) export*)
  22.                  form*))
  23.          ((begin) (loop (cdr body**)
  24.                 import*
  25.                 export*
  26.                 (append (cdar body**) form*))))))])))