record-printer? added by andyjpb on Wed Apr 9 13:38:10 2014

-----
(use records)

; stolen from db-hacks
(define (make-record-printer type-name field-names)
  (lambda (record port)
    (fprintf port "`(~A)\n" (string-intersperse (map (lambda (field-name)
						       (sprintf "(~A . ~S)" field-name ((record-accessor type-name field-name) record)))
						     field-names) "\n "))))

; EMAIL-ADDRESS ADTs
(define email-address-fields
  '(name
     local-part
     domain-part
     route))

(define email-address-adt
  (make-record-type 'EMAIL-ADDRESS email-address-fields))

(define-record-printer email-address-adt
 (make-record-printer email-address-adt email-address-fields))

(define e ((record-constructor email-address-adt '())))

e
-----
->
#<EMAIL-ADDRESS>