]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences.extras: this formulation of arg-max/min should be better
authorBjörn Lindqvist <bjourne@gmail.com>
Thu, 8 Feb 2018 18:39:31 +0000 (19:39 +0100)
committerBjörn Lindqvist <bjourne@gmail.com>
Thu, 8 Feb 2018 18:48:08 +0000 (19:48 +0100)
extra/sequences/extras/extras-docs.factor
extra/sequences/extras/extras-tests.factor
extra/sequences/extras/extras.factor

index 3f77165e22c04a730500e126fe7f06db1933ca5b..6e75c0307bea1b64879213f0c87de13fce35437e 100644 (file)
@@ -230,6 +230,16 @@ HELP: start-all*
                "{ 0 2 }"
     } } ;
 
+HELP: arg-max
+{ $values { "seq" sequence } { "n" integer } }
+{ $description "Outputs the sequence with the largest item." } ;
+
+HELP: arg-min
+{ $values { "seq" sequence } { "n" integer } }
+{ $description "Outputs the sequence with the smallest item." } ;
+
+{ arg-max arg-min } related-words
+
 HELP: count-subseq
 { $values
     { "subseq" sequence } { "seq" sequence } { "n" integer } }
index 85a88798b4fde67f43ae0d687c15fb4db3e2c0fb..880fbbd4cecede557d8c551f147a92f77c9f38a6 100644 (file)
@@ -157,6 +157,7 @@ IN: sequences.extras.tests
 { { 1 3 5 } } [ 6 <iota> <odds> >array ] unit-test
 
 { 1 } [ { 1 7 3 7 6 3 7 } arg-max ] unit-test
+{ 2 } [ { 0 1 99 } arg-max ] unit-test
 { 0 } [ { 1 7 3 7 6 3 7 } arg-min ] unit-test
 { V{ 0 4 } } [ { 5 3 2 10 5 } [ 5 = ] arg-where ] unit-test
 { { 2 1 0 4 3 } } [ { 5 3 2 10 5 } arg-sort ] unit-test
index c6943aa0f696752a9b92d229d5954fad558f9578..bf49f8c4d5fec9e1923aaf46cbeb3cc69b881554 100644 (file)
@@ -411,10 +411,10 @@ INSTANCE: odds immutable-sequence
     [ dup empty? ] swap until drop ; inline
 
 : arg-max ( seq -- n )
-    <enumerated> [ second-unsafe ] supremum-by first ;
+    [ supremum ] keep index ;
 
 : arg-min ( seq -- n )
-    <enumerated> [ second-unsafe ] infimum-by first ;
+    [ infimum ] keep index ;
 
 <PRIVATE