PasteRack.org
Paste # 12551
2015-08-29 18:34:57

Forked from paste # 56871.

Fork as a new paste.

Paste viewed 285 times.


Embed:

  1. #lang racket
  2. (require syntax/parse)
  3. (require (for-syntax syntax/parse))
  4. (define (syntax-split delimiter stx)
  5.   (define-syntax-class delim
  6.     (pattern delim:id #:when (equal? (syntax->datum #'delim) (syntax->datum delimiter))))
  7.   (syntax-parse stx
  8.     [((~and elem (~not :delim)) ... delim:delim . rest)
  9.      (cons #'(elem ...)  (syntax-split delimiter #'rest))]
  10.     [(elem ...)
  11.      (list #'(elem ...))]))
  12.  
  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)> #<syntax:2:0 (5 + 1)>)

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

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