In core.clj, merge is essentially defined using conj.
user=> (merge '(1) 2)
(2 1)
user=> (merge [1] 2)
[1 2]
user=> (merge #{1} 2)
#{1 2}
user=> (conj '(1) 2)
(2 1)
user=> (conj [1] 2)
[1 2]
user=> (conj #{1} 2)
#{1 2}
user=> (conj {:name "ryan"} {:age 25})
{:age 25, :name "ryan"}


-sun


On Jan 24, 10:51 am, e <[email protected]> wrote:
> merge confused me, too.  I was surprised to see in the docs that its input
> needn't be sorted (or have anything to do with lists)  . . . .or maybe it
> merges unsorted things however, but where's the discussion of whether the
> result of merging two sorted list is a sorted list?  Well, it's avoided
> because it's for maps.
>
> On Sat, Jan 24, 2009 at 1:13 AM, [email protected] <[email protected]>wrote:
>
>
>
> > user=> (doc merge)
> > -------------------------
> > clojure.core/merge
> > ([& maps])
> >  Returns a map that consists of the rest of the maps conj-ed onto
> >  the first.  If a key occurs in more than one map, the mapping from
> >  the latter (left-to-right) will be the mapping in the result.
> > nil
>
> > According to merge's doc string it is meant to work on maps.  However,
> > this is only part of the truth:
>
> > user=> (merge '(1) 2)
> > (2 1)
>
> > user=> (merge [1] 2)
> > [1 2]
>
> > user=> (merge #{1} 2)
> > #{1 2}
>
> > Of course, the canonical example:
>
> > user=> (merge {:name "ryan"} {:age 25})
> > {:age 25, :name "ryan"}
>
> > What's the point?  Maybe the doc string should be changed to be more
> > general, or perhaps merge should check that it is indeed working with
> > maps?
>
> > Personally, this doesn't bother me all that much.  However, if people
> > rely on this behavior then it could be harmful if in a future version
> > of Clojure merge only works for maps, or if it's results change for
> > the other types of structures.  I feel that a doc string should act as
> > a contract between the function and it's user (think Eiffel).  I think
> > the contract for merge could be improved.
>
> > -Ryan
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to