lispcommon-lispreader-macro

Define my own read macro


There are some read macros in Common Lisp such as ' #' #P, but how can I write a read macro?

Like this:

#T"hello world"
====================>
(gettext "hello world")

Solution

  • You can use set-macro-character and set-dispatch-macro-character, for example after:

    (set-dispatch-macro-character #\# #\T
      (lambda (s c n)
        `(gettext ,(read s t nil t))))
    ==> T
    

    you can use the installed read syntax

    (read-from-string "#T\"this is a test\"")
    ==> (GETTEXT "this is a test")