On Aug 6, 2014, at 11:02 AM, Alexander D. Knauth <[email protected]> wrote:
> > On Aug 6, 2014, at 1:47 PM, Alexander D. Knauth <[email protected]> wrote: > >> >> >> On Aug 6, 2014, at 1:10 PM, Kevin Forchione <[email protected]> wrote: >> >>> >>> On Aug 5, 2014, at 2:21 PM, Jens Axel Søgaard <[email protected]> wrote: >>> >>>> Is this a step in the right direction? >>>> >>>> (define-syntax (x stx) >>>> (syntax-parse stx >>>> [(_ (y ... (z ...) w ...)) >>>> #'(xf (yf y ... (zf z ...) w ...))])) >>>> >>>> The pattern (z ...) ... will match a sequence of lists such as (4 5 6) (7 >>>> 8) >>>> but it won't match (4 5 6) 7 8 from your example. >>>> >>>> /Jens Axel >>> >>> Closer. It doesn’t match something like ‘( 1 2 3 (4 5 6) 7 (8 9) 10), for >>> instance. >> >> For that I think you want something like this: >> (syntax-parse stx >> [(_ (~or (z ...) >> y) >> ...) >> #'(xf (yf y ... (zf z ...)))]) > > Sorry I forgot an ellipsis. I meant this: > (syntax-parse stx > [(_ (~or (z ...) > y) > ...) > #'(xf (yf y ... (zf z ...) ...))]) Remarkably difficult just to parse what amounts to nested lists! This doesn’t quite do what I want either. For instance: #lang racket (require (for-syntax syntax/parse)) #;(define-syntax (x stx) (define-syntax-class binding #:description "binding list" (pattern (z:number ...))) (syntax-parse stx [(_ b:binding ...) #'(list (list b.z ...) ...)])) #;(define-syntax (x stx) (define-syntax-class lbinding #:description "binding list" (pattern (z:number ...))) (define-syntax-class orbinding #:description "binding or" (pattern (y:number ...) #:with (z ...) #'(y ...)) (pattern (lb:lbinding) #:with (z ...) #'(lb.z ...))) (syntax-parse stx [(_ ob:orbinding ...) #'(list (list ob.z ...) ...)])) #;(define-syntax (x stx) (define-syntax-class lbinding #:description "binding list" (pattern (z:number ...))) (define-syntax-class orbinding #:description "binding or" (pattern (y:number ...) #:with (z ...) #'(y ...)) (pattern (lb:lbinding) #:with (z ...) #'(lb.z ...))) (syntax-parse stx [(_ ob:orbinding ...) #'(list (list ob.z ...) ...)])) (define-syntax (x stx) (syntax-parse stx [(_ (~or (z ...) y) ...) #'(list (list y ... (list z ...) ...))])) (x (1 2 3 4) (5 (6 7) 8)) expands to: (list (list (list 1 2 3 4) (list 5 (6 7) 8))))) instead of (list (list (list 1 2 3 4) (list 5 (list 6 7) 8))))). -Kevin
____________________ Racket Users list: http://lists.racket-lang.org/users

