(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))))