PasteRack.org
Paste # 56871
2015-08-29 18:07:59

Fork as a new paste.

Paste viewed 240 times.


Embed:

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