diff --git a/extra/sequences/extras/extras-tests.factor b/extra/sequences/extras/extras-tests.factor index 8e4fee89d8..797a5334f4 100644 --- a/extra/sequences/extras/extras-tests.factor +++ b/extra/sequences/extras/extras-tests.factor @@ -124,6 +124,8 @@ IN: sequences.extras.tests { 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 diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index 93e1555e94..15f7f85bd2 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -1,6 +1,6 @@ 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 @@ -319,6 +319,9 @@ INSTANCE: odds immutable-sequence [ 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