PasteRack.org
Paste # 99702
2018-11-02 20:30:13

Fork as a new paste.

Paste viewed 2422 times.


Embed:

  1. #lang racket
  2.  
  3. (require
  4.   (for-syntax
  5.    syntax/parse))
  6.  
  7. (define (create-catalog-item
  8.          #:item-id id
  9.          #:fancy-name name)
  10.   (list id name))
  11.  
  12. (define-syntax-rule (create-item name)
  13.   (define name
  14.     (create-catalog-item
  15.      #:item-id 'name
  16.      #:fancy-name (string-titlecase (symbol->string 'name))
  17.      )))
  18.  
  19. (define-syntax (create-item* stx)
  20.   (syntax-parse stx
  21.     ((_ name:id #:fancy-name fancy-name)
  22.      #'(define name
  23.          (create-catalog-item
  24.           #:item-id 'name
  25.           #:fancy-name fancy-name
  26.           )))
  27.  
  28.     ((_ name:id)
  29.      #'(create-item* name (string-titlecase (symbol->string 'name)))
  30.      )))
  31.  
  32. (create-item flobber)
  33. (create-item rabber)
  34. (create-item* trubble
  35.               #:fancy-name "DubbleTrubble")
  36.  
  37. (define *items*
  38.   (list
  39.    flobber
  40.    rabber
  41.    trubble
  42.    ))
  43.  
  44. *items*
  45.  

=>

'((flobber "Flobber") (rabber "Rabber") (trubble "DubbleTrubble"))