PasteRack.org
Paste # 14564
2014-08-20 16:43:26

Fork as a new paste.

Paste viewed 117 times.


Embed:

  1. #lang racket
  2. (require (for-syntax syntax/parse))
  3.  
  4. (define-syntax (p+ stx)
  5.   (syntax-parse stx
  6.     [(p+ x ...)
  7.      (with-syntax ([(pevald ...)
  8.                     (foldr (lambda (s m)
  9.                              (syntax-parse s
  10.                                [x:number (cons (+ (syntax-e #'x) (car m)) (cdr m))]
  11.                                [_ (cons (car m) (cons s (cdr m)))]))
  12.                            (cons 0 '())
  13.                            (syntax->list #'(x ...)))])
  14.        #`(list '+ pevald ...))]))
  15.  
  16. (p+ 1 'a 2  'b 3)

=>

'(+ 6 a b)