[racket] Improvement of a syntax-parse syntax class definition
Hi All,
The example program below defines a macro, my-let, that
enables you to write let-bindings with / as a separator.
  (my-let (x = 1 / y = 2 / z = 3)
          (+ x y z))
I'd like to improve the definition of the syntax class called bindings.
Ideally I'd like to replace its definition with:
(begin-for-syntax
  (define-splicing-syntax-class bindings
    [pattern (~separated / b:binding)
             #:with names #'(b.name ...)
             #:with expressions #'(b.expression ...)]))
But how can I define the fictitious ~separated ?
/Jens Axel
#lang racket
(require (for-syntax syntax/parse))
(begin-for-syntax
  (define-splicing-syntax-class binding #:literals (=)
    [pattern (~seq name:id = expression:expr)])
  (define-splicing-syntax-class bindings
    [pattern ()
             #:with names #'()
             #:with expressions #'()]
    [pattern (b:binding)
             #:with names #'(b.name)
             #:with expressions #'(b.expression)]
    [pattern (b:binding (~seq / b*:binding) ...)
             #:with names #'(b.name b*.name ...)
             #:with expressions #'(b.expression b*.expression ...)]))
(define-syntax (my-let stx)
  (syntax-parse stx
    [(_ bs:bindings body)
     (with-syntax ([(name ...) #'bs.names]
                   [(expr ...) #'bs.expressions])
       #'(let ([name expr] ...)
           body))]))
(my-let (x = 1 / y = 2 / z = 3)
        (+ x y z))
--
Jens Axel Søgaard