On 12.03.2010, at 10:32, Felix Breuer wrote:

> I guess I have to rephrase my previous questions to make them more
> clear: Why was this particular behavior chosen? What is the benefit of
> having quote and syntax-quote behaving differently in this regard?

Quote and syntax-quote serve very different purposes, despite the similar name 
an a superficial resemblance in functionality.

Quote is for writing unevaluated literals. You just want nothing changed in its 
argument, which is exactly what it does.

Syntax-quote is used for writing code templates, mostly inside macro 
definitions. In that situation, you want symbols be resolved in namespaces, 
just as they would if the form being constructed were used literally in the 
same place. To make code templates work correctly across namespaces (typically 
a macro is expanded in another namespace than the one it was defined in), it is 
thus preferable to have symbols converted to their namespace-qualified 
counterparts.

You might want to look at this blog post, whose topic is an exceptional 
situation where syntax-quote is not the most convenient way to write code 
templates:

        http://onclojure.com/2010/02/23/generating-deftype-forms-in-macros/

> Suppose I wanted to write my own version of = called (myeql a b) such
> that
> 
> user> (myeql '(v 1) `(v 1))
> true
> 
> I would have to walk the expression tree in both expressions and
> replace all unqualified symbols with the respective qualified symbols.
> How would I go about this? Is there an idomatic way to achieve this?

I don't see why you would ever want to do this, but here is one approach (not 
idiomatic):
- use clojure.walk to apply a transformation all over a form
- for each leaf of the tree, check if it is a symbol and if so, convert it to 
its namespace-qualified equivalent.

What is rather strange in my opinion is the fact that there is no utility 
function in clojure. core that does the second step, i.e. there is no function 
that will map 'x to `x. However, it is not difficult to write such a function:

(defn qualified-symbol
  [s]
  (symbol (str *ns*) (str s)))

Konrad.

-- 
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
Note that posts from new members are moderated - please be patient with your 
first post.
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