You can have unresolved symbols within a macro with:
~'symbol

David

On Wed, Dec 17, 2008 at 3:30 AM, Meikel Brandmeyer <m...@kotka.de> wrote:

>
> Hi,
>
> I'd like to propose/put up for discussion a change to the unquote
> handling.
> I basically ran into the following problem:
>
> I'd like to embed a DSL into my system. Using macros it should be
> possible
> to define a language, which looks like usual Clojure. Simply quote the
> form
> and pass it to a function, which knows how to handle the commands.
>
> However I hit a roadblock. Coming from Scheme, I tried the following
> approach.
>
> A hypothetical SQL embedding:
>
> (def x 5)
> (sql col1 from table1 where col2 = ~x)
>
> Or a hypothetical cljsh (inspired by scsh):
>
> (def *cmd* "/usr/bin/command")
> (run (~*cmd* -option 1 -another argument foo bar))
>
> In Scheme this is done, by quoting the macros argument using the
> quasiquote form. In Clojure, however, this style is not possible since
> we are
> missing quasiquote. Here a short list of examples on how the different
> quotations work:
>
> (quote (foo ~x bar))
> => Failure in Clojure.
> => In some Schemes: (foo (unquote x) bar), where , (aka. ~) translates
>   to some unquote form. It just quotes everything. Also the unquote.
>
> (quasiquote (foo ~x bar))
> => Not available in Clojure.
> => (foo 5 bar) in Scheme
>
> (syntax-quote (foo ~x bar))
> => (assuming ` would have a syntax-quote form as ' does with quote)
>   (my.ns/foo 5 maybe.some.other.ns/bar)
> => Not available in Scheme, AFAIK.
>
> So as you see, the above style is not possible, since in Clojure you
> only
> have the choice to be static or resolve all the symbols. If I want to
> use
> the style anyway, I have to jump through hoops and rewrite the quoted
> form in my handler function, be it replacing somehow marked or named
> symbols with values from the environment or be it renormalising all
> the
> symbols. (But what if the user injected a qualified symbol with ~?)
>
> So I came to the question of whether it is possible to include a
> similar
> quasiquote form, which does not resolve the symbols inside? It would
> be a philosophy of "Unquote, what the user wants to be unquoted, and
> leave the rest to me. I know how to handle it."
>
> And when were are at it: maybe also provide a syntax-quote, unquote
> and unquote-splice forms?
>
> Finally, I skipped the obvious question: Does this make sense at all?
> I like this way of including a sub-language. However, is it
> "idiomatic"?
> (for some definition of "idiomatic")
>
> Maybe there is already a different solution, which I just don't see at
> the moment.
>
> Sincerely
> Meikel
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to