PasteRack.org
Paste # 18560
2015-08-29 17:50:54

Fork as a new paste.

Paste viewed 162 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. (syntax-split #'|,| #'(1 + 1 |,| 5 + 1))
  15. (syntax-split #'|,| #'(1 + 1))
  16. (syntax-split #'|,| #'(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))>