<!-- 
RSS generated by JIRA (4.4#649-r158309) at Sat May 18 19:47:09 CDT 2013

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
For example:
http://dev.clojure.org/jira/si/jira.issueviews:issue-xml/CLJ-997/CLJ-997.xml?field=key&field=summary
-->
<rss version="0.92" >
<channel>
    <title>Clojure JIRA</title>
    <link>http://dev.clojure.org/jira</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>4.4</version>
        <build-number>649</build-number>
        <build-date>25-07-2011</build-date>
    </build-info>

<item>
            <title>[CLJ-997] max-key and min-key to return the first entry in case of several candidates</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-997</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Consider the following code:&lt;/p&gt;

&lt;p&gt;(def values [&lt;span class=&quot;error&quot;&gt;&amp;#91;1 2&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;3 4&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;5&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;6 7&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;8&amp;#93;&lt;/span&gt;])&lt;br/&gt;
(apply max-key count values)&lt;br/&gt;
; =&amp;gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;6 7&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Which returns the &lt;b&gt;last&lt;/b&gt; max entry &lt;span class=&quot;error&quot;&gt;&amp;#91;6 7&amp;#93;&lt;/span&gt;. Why its not the first max entry &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2&amp;#93;&lt;/span&gt;?&lt;br/&gt;
Well, truth is &quot;max-key&quot; gives no warranty on which max value will be returned.&lt;/p&gt;

&lt;p&gt;Consider the following example in Scala:&lt;/p&gt;

&lt;p&gt;println(List(List(0, 1, 2), List(2, 3, 4), List(1), List(1, 2, 3)).maxBy(_.length))&lt;br/&gt;
&amp;gt; List(0, 1, 2)&lt;/p&gt;

&lt;p&gt;The very same function in Scala returns the &lt;b&gt;first&lt;/b&gt; max entry (by default).&lt;/p&gt;



&lt;p&gt;The code from relase 1.4 file &quot;clojure/core.clj#4419-4426&quot; looks is:&lt;br/&gt;
=======================&lt;br/&gt;
4419: (defn max-key&lt;br/&gt;
4420:  &quot;Returns the x for which (k x), a number, is greatest.&quot;&lt;br/&gt;
4421:  {:added &quot;1.0&quot;&lt;br/&gt;
4422:   :static true}&lt;br/&gt;
4423:  (&lt;span class=&quot;error&quot;&gt;&amp;#91;k x&amp;#93;&lt;/span&gt; x)&lt;br/&gt;
4424:  (&lt;span class=&quot;error&quot;&gt;&amp;#91;k x y&amp;#93;&lt;/span&gt; (if (&amp;gt; (k x) (k y)) x y))&lt;br/&gt;
4425:  (&lt;span class=&quot;error&quot;&gt;&amp;#91;k x y &amp;amp; more&amp;#93;&lt;/span&gt;&lt;br/&gt;
4426:   (reduce1 #(max-key k %1 %2) (max-key k x y) more)))&lt;br/&gt;
=======================&lt;/p&gt;

&lt;p&gt;I am unsure what is the motivation in returning the last candidate, but&lt;/p&gt;

&lt;p&gt;I suggest two following things:&lt;/p&gt;

&lt;p&gt;1. Make &quot;max-key&quot; and &quot;min-key&quot; return the &lt;b&gt;first&lt;/b&gt; max/min entry if there are several candidates.&lt;/p&gt;

&lt;p&gt;  This behavior seems more natural/convenient (to me), because in most cases you want to get first &quot;winner&quot;.&lt;br/&gt;
  (e.g. find the first biggest vector in a sequence) and less often you need to get the last entry &amp;#8211; in those cases&lt;br/&gt;
   you can do &quot;reverse&quot; before feeding a sequence to &quot;max-key&quot;, thus it seems having &quot;return first max&quot; behavior more useful.&lt;/p&gt;

&lt;p&gt;  Line #4424 should have &quot;&amp;gt;=&quot; instead of &quot;&amp;gt;&quot;.&lt;/p&gt;

&lt;p&gt;2. Make &quot;max-key&quot; and &quot;min-key&quot; make warranty on order, which max/min entry will be returned (either first or last).&lt;/p&gt;

&lt;p&gt;  Line #4420 should say &quot;Returns the x for which (k x), a number, is greatest. In case of several matches, the first max entry will be returned&quot; or the same doc, but saying &quot;the last max entry will returned&quot;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15453">CLJ-997</key>
            <summary>max-key and min-key to return the first entry in case of several candidates</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="oshyshko">Oleksandr Shyshko</reporter>
                        <labels>
                    </labels>
                <created>Fri, 18 May 2012 06:03:15 -0500</created>
                <updated>Fri, 18 May 2012 16:03:44 -0500</updated>
                                    <version>Release 1.3</version>
                <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28526" author="steveminer@gmail.com" created="Fri, 18 May 2012 16:03:44 -0500"  >&lt;p&gt;The current behavior matches the documentation so I wouldn&apos;t consider it a &quot;defect&quot;.  There doesn&apos;t seem to be a compelling reason to impose a tie-breaker rule on the implementation.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>
</channel>
</rss>