proof-of-concept read syntax for hash tables added by aranhoide on Tue Nov 26 23:30:41 2013

(define (is-whitespace? char)
  (or (eqv? char #\space) (eqv? char #\newline)))

(define (read-to-end-brace port)
  (let loop ()
    (read-token is-whitespace? port)
    (if (eqv? (peek-char port) #\} )
      (begin (read-char port) '())
      (cons (read port) (loop)))))

(define (group2 lst)
  (if (null? lst)
    '()
    (cons (list (car lst) (cadr lst))
          (group2 (cddr lst)))))

(set-read-syntax! #\{
  (lambda (port)
    (let ((table-name (gensym)))
      `(let ((,table-name (make-hash-table)))
         ,@(map (lambda (pair) `(hash-table-set! ,table-name ,@pair))
                (group2 (read-to-end-brace port)))
         ,table-name))))