Thanks,you are right.I want to creat a map which keeps elements in
insertion order, but clojure doesn‘t have.
在 2013-6-6 下午10:02,"Andy Fingerhut" <andy.finger...@gmail.com>写道:

> Your comparator #(if (= %1 %2) 0 1) may happen to give the correct answers
> for your example sorted-maps, but it is also a bad comparator that will
> fail for larger examples:
>
> user=> (:a (sorted-map-by #(if (= %1 %2) 0 1) :z -26 :b 1 :a 2 :c 3 :m 13
> :h 8))
> nil
> user=> (:z (sorted-map-by #(if (= %1 %2) 0 1) :z -26 :b 1 :a 2 :c 3 :m 13
> :h 8))
> nil
>
> That is because if two items are not =, by returning 1 you are telling the
> caller "the first argument should come after the second argument".  Thus if
> at some time the comparator is called as (cmp :a :z), and later it is
> called as (cmp :z :a), it returns the inconsistent results that :a should
> come after :z, and later that :z should come after :a.  No sorted tree can
> hope to return correct results given such an inconsistent comparator.
>
> More examples and discussion at the link below, if you are interested:
>
>
> https://github.com/jafingerhut/thalia/blob/master/doc/other-topics/comparators.md
>
> Andy
>
>
> On Thu, Jun 6, 2013 at 4:19 AM, dennis zhuang <killme2...@gmail.com>wrote:
>
>> Sorry, it's my mistake.
>> Because treep map use the comparator to compare keys, and if the
>> comparator returns 1 constantly,it can not find the item that equals the
>> key.
>>
>> So i can modified the example,and it works:
>>
>> user=> (sorted-map-by #(if (= %1 %2) 0 1) :b 1 :a 2)
>> {:b 1, :a 2}
>> user=> (:a (sorted-map-by #(if (= %1 %2) 0 1) :b 1 :a 2))
>> 2
>> user=> (:b (sorted-map-by #(if (= %1 %2) 0 1) :b 1 :a 2))
>> 1
>>
>>
>> 2013/6/6 dennis zhuang <killme2...@gmail.com>
>>
>>> user=> (sorted-map-by (constantly 1) :b 1 :a 2)
>>> {:b 1, :a 2}
>>> user=> (:a (sorted-map-by (constantly 1) :b 1 :a 2))
>>> nil
>>> user=> (keys (sorted-map-by (constantly 1) :b 1 :a 2))
>>> (:b :a)
>>> user=> (count (sorted-map-by (constantly 1) :b 1 :a 2))
>>> 2
>>> user=> (:a (sorted-map-by (constantly 1) :b 1 :a 2))
>>> nil
>>>
>>> It looks so strange.The result map has keys :a and :b,but i can't get
>>> their values.
>>> Why? I try to hack the code,but i can't find the reason.
>>>
>>>
>>> --
>>> 庄晓丹
>>> Email:        killme2...@gmail.com xzhu...@avos.com
>>> Site:           http://fnil.net
>>> Twitter:      @killme2008
>>>
>>>
>>>
>>
>>
>> --
>> 庄晓丹
>> Email:        killme2...@gmail.com xzhu...@avos.com
>> Site:           http://fnil.net
>> Twitter:      @killme2008
>>
>>
>>  --
>> --
>> 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
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to clojure+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>>
>>
>
>  --
> --
> 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
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to