PasteRack.org
Paste # 57109
2021-04-25 07:20:58

Fork as a new paste.

Paste viewed 460 times.


Embed:

~or with ~optional precedence

  1. #lang racket/base
  2.  
  3. (require (for-syntax racket/base
  4.                      syntax/parse))
  5.  
  6. (define-syntax (example stx)
  7.   (syntax-parse stx
  8.     #:literals (unquote)
  9.     [(_ (~or (~optional (~and #:first-kw f-kw))
  10.              (~optional the-first:expr))
  11.         (~or (~optional (~and #:second-kw s-kw))
  12.              (~optional the-second:expr)))
  13.      #'(hash (~? (~@ 'first the-first)) (~? (~@ 'second the-second)))]))
  14.  
  15.  
  16. (example 5)
  17.  
  18. ;; The invocation prints '#hash((second . 5))
  19. ;; I need it to be '#hash((first . 5))

=>

'#hash((second . 5))