PasteRack.org
Paste # 82625
2018-08-06 16:28:38

Fork as a new paste.

Paste viewed 473 times.


Embed:

macro test

  1. #lang racket
  2.  
  3. (require (for-syntax syntax/parse))
  4.  
  5. (define-syntax (def-par stx)
  6.   (syntax-parse stx
  7.     [(_ name) #'(define name (hash))] ; creating an empty hash map
  8.     [(_ name [par val] ...)
  9.      #''(define name (hash (symbol->string 'par ...) val ...))]))
  10.  
  11. (def-par p1)
  12. p1 ; correct ==> '#hash()
  13.  
  14. (def-par p2 [a 1] [b 2])
  15. ;p2 ; incorrect ==> '(define p2 (hash (symbol->string 'a 'b) 1 2))
  16.     ; should be ==> '(define p2 (hash "a" 1 "b" 2))
  17.  
  18. ; But not much won yet; ideally there's no need to enter "" or [], like
  19. #;(def-par sim-pars
  20.            a 1
  21.            b 2)

=>

'#hash()

'(define p2 (hash (symbol->string 'a 'b) 1 2))