I've been struggling to get something working. Jon and Asumu leant me a hand on #racket. I learned some ways to use patterns instead of resorting to datum->syntax, which I can use in the future. But for what I'm doing now (I need to sort arguments for a lambda) I don't see any way around running things through syntax->datum and datum->syntax. However I seem to be fudging lexical context.
The original is using syntax-parse to chunk up arg specs and so on. But, here is a greatly-distilled version: #lang racket (require (for-syntax racket/list)) (define-syntax (lam stx) (syntax-case stx () [(_ args body ...) #`(lambda #,(datum->syntax #'args (append (syntax->datum #'args))) body ...)])) ;; Use `lam' (define f1 (lam (x y) (list x y))) (f1 1 0) ;; => '(1 0) ;; Good. ;; Now a variation: (define-syntax (expand-to-lam stx) (syntax-case stx () [(_ (name arg ...) body ...) #'(lam (arg ...) body ...)])) ;; Use it (expand-to-lam (f2 x y) (list x y)) ;; => x: unbound identifier in module ;; in: x ;; Huh? Is there something else I should do instead, or is this possibly a bug? ____________________ Racket Users list: http://lists.racket-lang.org/users