In (let [[x :as y] [1 2]]), there is already an object to make y "point to": the vector [1 2]. in ((fn [x :as y]) 1 2), there is no such object.
On Friday, January 25, 2013 2:18:39 PM UTC-8, Ben wrote: > > Both of these work: > > user> (let [[x & y] [1 2]] [x y]) > [1 (2)] > user> (let [[x :as y] [1 2]] [x y]) > [1 [1 2]] > > And this works: > > user> ((fn [x & y] [x y]) 1 2) > [1 (2)] > > But this gives an exception (unsupported binding form): > > user> ((fn [x :as y] [x y]) 1 2) > ; Evaluation aborted. > > I would have expected this to work and return [1 [1 2]], with y bound > to the whole vector implicitly passed to the function (just as it's > bound to the tail of the whole vector implicitly passed in the third > case). > > This seems to happen because (apparently) the internals of fn* handle > rest parameters already, so that clojure.core/maybe-destructured > doesn't actually need to do anything to top-level elements of the > binding vector: > > clojure.core> (maybe-destructured '[a b] ()) > ([a b]) > clojure.core> (maybe-destructured '[a & b] ()) > ([a & b]) > clojure.core> (maybe-destructured '[a [b & c]] ()) > ([a p__8059] (clojure.core/let [[b & c] p__8059])) > > Since & is a symbol, it's just passed right through and left to fn* to > deal with. But :as is not a symbol, so we end up with this: > > clojure.core> (maybe-destructured '[a :as b] ()) > ([a p__8064 b] (clojure.core/let [:as p__8064])) > > Is there a reason for this apparent irregularity? > > -- > Ben Wolfson > "Human kind has used its intelligence to vary the flavour of drinks, > which may be sweet, aromatic, fermented or spirit-based. ... Family > and social life also offer numerous other occasions to consume drinks > for pleasure." [Larousse, "Drink" entry] > -- -- 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