{ 1 } [ { 1 7 3 7 6 3 7 } arg-max ] unit-test
{ 0 } [ { 1 7 3 7 6 3 7 } arg-min ] unit-test
+{ { 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
{ t } [ { 1 2 3 4 5 } 1 first= ] unit-test
{ t } [ { 1 2 3 4 5 } 2 second= ] unit-test
USING: accessors arrays assocs fry grouping growable kernel
locals make math math.order math.ranges sequences
-sequences.private splitting ;
+sequences.private sorting splitting ;
FROM: sequences => change-nth ;
IN: sequences.extras
[ dup length iota zip ] dip
[ first-unsafe ] prepose filter values ; inline
+: arg-sort ( seq -- indices )
+ dup length iota zip sort-keys values ;
+
: first= ( seq elt -- ? ) [ first ] dip = ; inline
: second= ( seq elt -- ? ) [ second ] dip = ; inline
: third= ( seq elt -- ? ) [ third ] dip = ; inline