I've been working on the Wiki lately and I'm stuck on the part about
syntax-quotes (that I had already written) which required some
updating.

There have been some changes (linked to fully lazy sequences I
suppose) with the way syntax-quotes are expanded.

It used to work like this:

------------------------------

For Lists, syntax-quote establishes a template of the corresponding
data structure. Within the template, unqualified forms behave as if
recursively syntax-quoted.

`(x1 x2 x3 ... xn)

is interpreted to mean

(clojure.core/concat |x1| |x2| |x3| ... |xn|)

where the | | are used to indicate a transformation of an xj as
follows:

    * |form| is interpreted as (clojure.core/list `form), which
contains a syntax-quoted form that must then be further interpreted.

    * |~form| is interpreted as (clojure.core/list form).

    * |~...@form| is interpreted as form.

If the syntax-quote syntax is nested, the innermost syntax-quoted form
is expanded first. This means that if several ~ occur in a row, the
leftmost one belongs to the innermost syntax-quote.

------------------------------

but now

`(x1 x2 x3 ... xn)

is interpreted to mean

(clojure.core/seq (clojure.core/concat |x1| |x2| |x3| ... |xn|))

[ Rich PLEASE explain why the change ]

There's nothing shocking about that except for this peculiar behavior:

`()

is expanded to

(clojure.core/list)

instead of (what you would expect following the rule):

(clojure.core/seq (clojure.core/concat))

Of course the latter would produce nil which is WRONG, so this
asymmetry was introduced (which was NOT there in the past because it
would have been: (clojure.core/concat (clojure.core/list)) ).

But that's not the end of it. If you do

`[]

you get:

(clojure.core/apply clojure.core/vector (clojure.core/seq
(clojure.core/concat)))

instead of (what you would expect and is EQUIVALENT):

(clojure.core/vector)

The same for the other analogous data structures.

Now, that does seem a little bizarre.

A simple question (especially for Rich):

why not simply make

`(x1 x2 x3 ... xn)

expand to

(clojure.core/apply clojure.core/list (clojure.core/seq (clojure.core/
concat))) ?

That way the symmetry is restored and the rules are much simpler.


Rock

--~--~---------~--~----~------------~-------~--~----~
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