10
|
1
|
(in-package :demo) |
0
|
2
|
|
10
|
3
|
(defun mkstr (&rest args) |
|
4
|
(with-output-to-string (s) |
|
5
|
(dolist (a args) (princ a s)))) |
5
|
6
|
|
10
|
7
|
(defun symb (&rest args) |
|
8
|
(values (intern (apply #'mkstr args)))) |
7
|
9
|
|
0
|
10
|
(defun random-id () |
|
11
|
(format NIL "~8,'0x-~8,'0x" (random #xFFFFFFFF) (get-universal-time))) |
|
12
|
|
|
13
|
(defun scan-dir (dir filename callback) |
|
14
|
(dolist (path (directory (merge-pathnames (merge-pathnames filename "**/") dir))) |
|
15
|
(funcall callback path))) |
5
|
16
|
|
|
17
|
(defun sbq-reader (stream sub-char numarg) |
|
18
|
"The anaphoric sharp-backquote reader: #`((,a1))" |
|
19
|
(declare (ignore sub-char)) |
|
20
|
(unless numarg (setq numarg 1)) |
|
21
|
`(lambda ,(loop for i from 1 to numarg |
|
22
|
collect (symb 'a i)) |
|
23
|
,(funcall |
|
24
|
(get-macro-character #\`) stream nil))) |
|
25
|
|
14
|
26
|
(eval-when (:load-toplevel) |
5
|
27
|
(set-dispatch-macro-character |
|
28
|
#\# #\` #'demo:sbq-reader)) |