I wrote:
> (define-syntax define
> (lambda (x)
> (with-syntax ((orig-define #'(@ (guile) define)))
> (syntax-case x ()
> ((_ (proc arg ...) e0 e1 ...)
> #'(orig-define proc (lambda (arg ...) e0 e1 ...)))
> ((_ v e)
> (identifier? #'v)
> (if (string? (syntax->datum #'e))
> #'(orig-define v (string-copy e))
> #'(orig-define v e)))))))
In case you're planning to use this, I just realized that this syntax
definition has a flaw: it won't handle cases like this:
(define (map f . xs) ...)
To fix this flaw, change the two lines after syntax-case to:
> ((_ (proc . args) e0 e1 ...)
> #'(orig-define proc (lambda args e0 e1 ...)))
The other macro I provided has the same flaw, and the same fix applies.
Mark