add sorting.functor

db4
Doug Coleman 2009-04-03 17:28:55 -05:00
parent 32954b75ad
commit ce73c17c1d
2 changed files with 25 additions and 0 deletions

View File

@ -0,0 +1 @@
Doug Coleman

View File

@ -0,0 +1,24 @@
! Copyright (C) 2009 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: functors kernel math.order sequences sorting ;
IN: sorting.functor
FUNCTOR: define-sorting ( NAME QUOT -- )
NAME<=> DEFINES ${NAME}<=>
NAME>=< DEFINES ${NAME}>=<
NAME-compare DEFINES ${NAME}-compare
NAME-sort DEFINES ${NAME}-sort
NAME-sort-keys DEFINES ${NAME}-sort-keys
NAME-sort-values DEFINES ${NAME}-sort-values
WHERE
: NAME<=> ( obj1 obj2 -- <=> ) QUOT bi@ <=> ;
: NAME>=< ( obj1 obj2 -- >=< ) NAME<=> invert-comparison ;
: NAME-compare ( obj1 obj2 quot -- <=> ) bi@ NAME<=> ; inline
: NAME-sort ( seq -- sortedseq ) [ NAME<=> ] sort ;
: NAME-sort-keys ( seq -- sortedseq ) [ [ first ] NAME-compare ] sort ;
: NAME-sort-values ( seq -- sortedseq ) [ [ second ] NAME-compare ] sort ;
;FUNCTOR