new names macro pasted by iterrogo on Mon Oct 6 17:46:48 2014
(define-syntax make-obj
(ir-macro-transformer
(lambda (exp inject compare)
(define (symbol->obj-proc-name base separator sym)
(string->symbol (string-append (->string base) separator (->string sym))))
`(begin (define ,(inject (symbol->obj-proc-name 'make "-" (inject (cadr exp))))
(lambda args
(map (match-lambda ((k v) `(,k . ,v)))
(chop args 2))))
(define ,(inject (symbol->obj-proc-name (inject (cadr exp)) "" "->list")) (lambda (obj) obj))
(define ,(inject (symbol->obj-proc-name "list->" "" (inject (cadr exp)))) (lambda (obj) obj))
,@(map (lambda (sym)
`(define ,(inject (symbol->obj-proc-name (inject (cadr exp)) "-" (inject sym)))
(lambda (l) (alist-ref ',sym l))))
(cddr exp))))))
usage added by iterrogo on Mon Oct 6 17:49:29 2014
=> (make-obj food name expires) => (define f (make-food "apple" 10)) => (food-name f) "apple"