From dfe06d307067d00ff901f9b0ffe6060e4d31f5d6 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Mon, 6 Aug 2012 10:59:40 -0700 Subject: [PATCH] sorting.extras: adding 'argsort'. --- extra/sorting/extras/extras-tests.factor | 7 +++++++ extra/sorting/extras/extras.factor | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 extra/sorting/extras/extras-tests.factor create mode 100644 extra/sorting/extras/extras.factor diff --git a/extra/sorting/extras/extras-tests.factor b/extra/sorting/extras/extras-tests.factor new file mode 100644 index 0000000000..931ff3ec52 --- /dev/null +++ b/extra/sorting/extras/extras-tests.factor @@ -0,0 +1,7 @@ +USING: kernel math.order sequences tools.test ; +IN: sorting.extras + +{ { 0 2 1 } } [ { 10 30 20 } [ <=> ] argsort ] unit-test +{ { 2 0 1 } } [ + { "hello" "goodbye" "yo" } [ [ length ] bi@ <=> ] argsort +] unit-test diff --git a/extra/sorting/extras/extras.factor b/extra/sorting/extras/extras.factor new file mode 100644 index 0000000000..6f0ef81104 --- /dev/null +++ b/extra/sorting/extras/extras.factor @@ -0,0 +1,7 @@ +USING: assocs kernel sequences sequences.private sorting ; +IN: sorting.extras + +: argsort ( seq quot: ( obj1 obj2 -- <=> ) -- sortedseq ) + [ dup length iota zip ] dip + [ [ first-unsafe ] bi@ ] prepose + sort [ 1 swap nth-unsafe ] map! ; inline