From: Björn Lindqvist Date: Thu, 8 Feb 2018 18:39:31 +0000 (+0100) Subject: sequences.extras: this formulation of arg-max/min should be better X-Git-Tag: 0.98~354 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=603354a02e03c6bf36a572a0f2ca8a8c60f75055 sequences.extras: this formulation of arg-max/min should be better --- diff --git a/extra/sequences/extras/extras-docs.factor b/extra/sequences/extras/extras-docs.factor index 3f77165e22..6e75c0307b 100644 --- a/extra/sequences/extras/extras-docs.factor +++ b/extra/sequences/extras/extras-docs.factor @@ -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 } } diff --git a/extra/sequences/extras/extras-tests.factor b/extra/sequences/extras/extras-tests.factor index 85a88798b4..880fbbd4ce 100644 --- a/extra/sequences/extras/extras-tests.factor +++ b/extra/sequences/extras/extras-tests.factor @@ -157,6 +157,7 @@ IN: sequences.extras.tests { { 1 3 5 } } [ 6 >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 diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index c6943aa0f6..bf49f8c4d5 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -411,10 +411,10 @@ INSTANCE: odds immutable-sequence [ dup empty? ] swap until drop ; inline : arg-max ( seq -- n ) - [ second-unsafe ] supremum-by first ; + [ supremum ] keep index ; : arg-min ( seq -- n ) - [ second-unsafe ] infimum-by first ; + [ infimum ] keep index ;