From 603354a02e03c6bf36a572a0f2ca8a8c60f75055 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bj=C3=B6rn=20Lindqvist?= Date: Thu, 8 Feb 2018 19:39:31 +0100 Subject: [PATCH] sequences.extras: this formulation of arg-max/min should be better --- extra/sequences/extras/extras-docs.factor | 10 ++++++++++ extra/sequences/extras/extras-tests.factor | 1 + extra/sequences/extras/extras.factor | 4 ++-- 3 files changed, 13 insertions(+), 2 deletions(-) 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 ;