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"