The problem is that syntax-case pattern doesn't allow allow
pattern of the form (x ... y ...) that is with two ellipsis on the
same level.
Luckily syntax-parse allow these:
(require syntax/parse)
(syntax-parse #'(a a a a 41 42 43)
[(c ... d ...)
#''((c ...) (d ...))])
(syntax-parse #'(a a a a 41 42 43)
[(c:id ... d ...)
#''((c ...) (d ...))])
/Jens Axel
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/users
>
--
--
Jens Axel Søgaard
#lang typed/racket
(require (for-syntax syntax/parse))
(define-syntax (test stx)
(syntax-parse stx #:datum-literals (in def)
[(_ name
(def a ...) ...
(in clause do ...) ...)
#'(list a ... ... do ... ...)]))
(test A (def 1 2 3) (in 4 5 6))
(define-syntax (foo stx)
(syntax-case stx (in def)
[(_ name . more)
#'(collect-defs () name . more)]))
(define-syntax (collect-defs stx)
(syntax-case stx (in def)
[(_ (defs-seen ...) name (def a ...) . more)
#'(collect-defs (defs-seen ... (def a ...)) name . more)]
[(_ defs name . more)
#'(collect-ins defs () name . more)]))
(define-syntax (collect-ins stx)
(syntax-case stx (in def)
[(_ defs (ins-seen ...) name (in clause ...) . more)
#'(collect-ins defs (ins-seen ... (in clause ...)) name . more)]
[(_ defs ins name . more)
#'(finish defs ins name . more)]))
(define-syntax (finish stx)
(syntax-case stx ()
[(_ defs ins name . more)
#''((definitions: defs)
(ins: ins)
(name: name)
(more: more))]))
(foo "a-name"
(def x 41)
(def y 42)
(in a)
(in b)
"yada")
/Jens Axel