-
Notifications
You must be signed in to change notification settings - Fork 3
/
example.lisp
24 lines (19 loc) · 972 Bytes
/
example.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload :named-readtables))
(defpackage #:silly-named-readtables (:use :cl #:named-readtables))
(in-package #:silly-named-readtables)
(defreadtable :silly-table
(:merge :standard)
(:dispatch-macro-char #\# #\' (lambda (stream char arg)
(declare (ignore char arg))
(let ((fname (read stream)))
(etypecase fname
((or symbol (cons (eql cl:setf) *))
`(function ,fname))
(cons `(silly-function ,@fname))))))
(:case :upcase))
(read-from-string "#'foo") ;; => #'FOO
(read-from-string "#'(foo bar)") ;; => #'(FOO BLA)
(in-readtable :silly-table)
(read-from-string "#'some-function") ;; => #'SOME-FUNCTION
(read-from-string "#'(foo bar)") ;; => (SILLY-FUNCTION FOO BAR)