[plt-scheme] Cuystomizing read
On Sun, 24 Dec 2006, Greg Woodhouse wrote:
> I'm trying to understand the manual section (11.2) that discusses
> customizing the I/O handlers. I know this a kind of a pointless example,
> but if I wanted read to consume #true and return #t (not just consume #t
> and leave rue in the input buffer), how might this be done?
I'm not sure if this is right (I'm also just hacking this on the fly), but
this appears to do something:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(module my-readtable mzscheme
(provide make-my-readtable)
;; A small example of a readtable to allow the user to enter #true
;; and #false.
(define (parse-dispatch ch port src line col pos)
(cond
[(and (char=? #\f ch)
(string=? "alse" (peek-string 4 0 port)))
(read-string 4 port)
(datum->syntax-object #f #f
(list src line col pos 6))]
[(and (char=? #\t ch)
(string=? "rue" (peek-string 3 0 port)))
(read-string 3 port)
(datum->syntax-object #f #t
(list src line col pos 5))]
[(char=? #\f ch)
(datum->syntax-object #f #f
(list src line col pos 2))]
[(char=? #\t ch)
(datum->syntax-object #f #t
(list src line col pos 2))]))
(define (make-my-readtable)
(make-readtable (current-readtable)
#\t 'dispatch-macro parse-dispatch
#\f 'dispatch-macro parse-dispatch)))
(require my-readtable)
(current-readtable (make-my-readtable))
(list #t #true #f #false)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
I don't have much prior experience with readtables, though, so this might
not be quite right.