PasteRack.org
Paste # 36704
2015-08-29 17:53:02

Fork as a new paste.

Paste viewed 237 times.


Embed:

  1. #lang racket
  2.  
  3. (require syntax/parse)
  4.  
  5. (define (syntax-split delimiter stx)
  6.   (define-syntax-class delim
  7.     (pattern delim:id #:when (free-identifier=? #'delim delimiter)))
  8.   (syntax-parse stx
  9.     [((~and elem (~not :delim)) ... delim:delim . rest)
  10.      #`((elem ...) . #,(syntax-split delimiter #'rest))]
  11.     [(elem ...)
  12.      #'((elem ...))]))
  13.  
  14. (define-syntax-rule (split/delim delimiter stx)
  15.   (syntax-split #'delimiter stx))
  16.  
  17. (split/delim |,| #'(1 + 1 |,| 5 + 1))
  18. (split/delim |,| #'(1 + 1))
  19. (split/delim |,| #'(1 + 1 |,| 3 * 5 |,| 25))

=>

#<syntax:2:0 ((1 + 1) (5 + 1))>

#<syntax:2:0 ((1 + 1))>

#<syntax:2:0 ((1 + 1) (3 * 5) (25))>