PasteRack.org
Paste # 74231
2017-04-25 07:27:32

Fork as a new paste.

Paste viewed 101 times.


Embed:

  1. #lang racket/base
  2. (require (for-syntax racket/base))
  3. (define-syntax (define/hyphen stx)
  4.   (syntax-case stx ()
  5.     [(_ id1 id2 rhs-expr)
  6.      (let ()
  7.        (define first-part (symbol->string (syntax-e #'id1)))
  8.        (define second-part (symbol->string (syntax-e #'id2)))
  9.        (define first-len (string-length first-part))
  10.        (define second-len (string-length second-part))
  11.        (define hyphenated-id
  12.          (datum->syntax
  13.           #'id1
  14.           (string->symbol (string-append first-part "-" second-part))))
  15.        (syntax-property
  16.         #`(define #,hyphenated-id rhs-expr)
  17.         'sub-range-binders
  18.         (list
  19.          (vector (syntax-local-introduce hyphenated-id)
  20.                  0 first-len 0.5 0.5
  21.                  (syntax-local-introduce #'id1)
  22.                  0 first-len 0.5 0.5)
  23.          (vector (syntax-local-introduce hyphenated-id)
  24.                  (+ first-len 1) second-len 0.5 0
  25.                  (syntax-local-introduce #'id2)
  26.                  0 second-len 0.5 1))))]))
  27.  
  28. (define/hyphen big generator
  29.   11)
  30.  
  31. (+ big-generator big-generator)

=>

22