Subject: Re: Making Lisp popular - can it be done?
From: rpw3@rpw3.org (Rob Warnock)
Date: Wed, 24 Dec 2008 19:46:35 -0600
Newsgroups: comp.lang.lisp
Message-ID: <JIOdnTE5QPlmeM_UnZ2dnUVZ_hSdnZ2d@speakeasy.net>
budden  <budden-lisp@mail.ru> wrote:
+---------------
| 3. Reader extensions and fixes: associate readmacros with symbols, not
| only to characters. Making possible to have multiple assignments of
| e.g. #\[ readmacro at the same time and a way to switch them easily.
+---------------

Already there: You can use the "integer infix parameter" argument
of a dispatching macro character reader macro function, see CLHS
"2.1.4.4 Macro Characters" to completely change the meaning, if
you like. That is, #[...] can be totally different from #0[...],
which can be totally different from #1[...]. You could even have
the forms with supplied integer parameters set a global default
which is used by any later forms without one, so that:

    #0[...] #[...] #[...] #1[...] #[...] #[...]

would mean the same as:

    #0[...] #0[...] #0[...] #1[...] #1[...] #1[...]

I would not suggest doing that, though, since that would make #[...] be
"globally moded" in a way that can be very hard to read & debug later.

If you don't want to use dispatching macro characters, then you
can pull the same trick with plain macro characters, by inventing
a magic "default-switching" syntax different from any of your other
uses. E.g., if "[" is your macro character then you could easily
write [horribly confusing] stuff like this:

    (defun foo (who when base)
      [##SQL]
      (let* (name
	     date
	     (row [select name, date from comments
			  where name = '$who' and date < '$when'
			  limit 1]))
	[##PERL]
	(values name [$date - $base])))

I would not suggest trying to use anything as confusing as that
for real... but one *could*...


-Rob

-----
Rob Warnock			<rpw3@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607