I got a strange side effect with my silex apply hack. I was able to simplify it down to this test case where I define the two macros apply and token. The file a.scm works: $ cat a.scm (define gambit-apply apply) (define-syntax apply (syntax-rules (string-append) ((_ string-append list) (append-strings list)) ((_ func list) (gambit-apply func list)))) (display (gambit-apply string-append (list "a"))) (newline) $ gsi -:s a.scm a The file b.scm works also: $ cat b.scm (define-syntax token (syntax-rules () ((_ name value) (cons name value)) ((_ name) (cons name '())))) (define (b) (token "b")) (display (car (b))) (newline) $ gsi -:s b.scm b But when I concatenate the two files I get an error: $ cat a.scm b.scm > c.scm $ gsi -:s c.scm *** ERROR IN #<procedure #2>, "c.scm"@7.7 -- Unbound variable: gambit-apply How could gambit-apply get lost?