It's the beginner's version of what Asumu proposed. Perfectly acceptable.
On Feb 15, 2014, at 9:27 PM, Matthew Butterick wrote: > Thanks for the suggestions. In the meantime I came up with this noobtastic > recursive approach, which seems to work so far. It simplifies every > definition form to the basic (define name body ...) form, and then performs > the syntax transformation on that. (Bad idea?) > > This is sufficient for my macro because I'm just rewriting define, and don't > need to inspect the arguments more closely. > > (define-syntax (define/foo stx) > (syntax-case stx () > [(_ (proc arg ... . rest-arg) body ...) > #'(define/foo proc > (λ(arg ... . rest-arg) body ...))] > [(_ name body ...) > #'(do-transform)])) > > > On Feb 15, 2014, at 5:49 PM, Asumu Takikawa <as...@ccs.neu.edu> wrote: > >> On 2014-02-15 20:42:06 -0500, Asumu Takikawa wrote: >>> (define-syntax (my-define stx) >>> (syntax-case stx () >>> [(_ . rst) >>> (define-values (id rhs) >>> (normalize-definition stx #'my-lambda)) >>> #'(define #,id #,rhs)])) >> >> I should actually try the examples I write. Here's a version that should >> work: >> >> (require (for-syntax syntax/define)) >> >> ;; silly lambda that just runs body twice >> (define-syntax-rule (my-lambda (x ...) b) >> (lambda (x ...) b b)) >> >> (define-syntax (my-define stx) >> (syntax-case stx () >> [(_ . rst) >> (begin >> (define-values (id rhs) >> (normalize-definition stx #'my-lambda)) >> #`(define #,id #,rhs))])) >> >> (my-define (f x) (displayln x)) >> (f 3) >> >> Cheers, >> Asumu > > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users