factor/extra/sequences/lib/lib.factor

49 lines
1.4 KiB
Factor
Raw Normal View History

2007-09-20 18:09:08 -04:00
USING: combinators.lib kernel sequences math
sequences.private shuffle ;
IN: sequences.lib
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: map-reduce ( seq map-quot reduce-quot -- result )
>r [ unclip ] dip [ call ] keep r> compose reduce ; inline
: reduce* ( seq quot -- result ) [ ] swap map-reduce ; inline
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: higher ( a b quot -- c ) [ compare 0 > ] curry most ; inline
: lower ( a b quot -- c ) [ compare 0 < ] curry most ; inline
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: longer ( a b -- c ) [ length ] higher ;
: shorter ( a b -- c ) [ length ] lower ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: longest ( seq -- item ) [ longer ] reduce* ;
: shortest ( seq -- item ) [ shorter ] reduce* ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: bigger ( a b -- c ) [ ] higher ;
: smaller ( a b -- c ) [ ] lower ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: biggest ( seq -- item ) [ bigger ] reduce* ;
: smallest ( seq -- item ) [ smaller ] reduce* ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: minmax ( seq -- min max )
#! find the min and max of a seq in one pass
1/0. -1/0. rot [ tuck max >r min r> ] each ;