]> gitweb.factorcode.org Git - factor.git/blob - extra/sequences/lib/lib.factor
Initial import
[factor.git] / extra / sequences / lib / lib.factor
1 USING: combinators.lib kernel sequences math
2 sequences.private shuffle ;
3
4 IN: sequences.lib
5
6 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7
8 : map-reduce ( seq map-quot reduce-quot -- result )
9     >r [ unclip ] dip [ call ] keep r> compose reduce ; inline
10
11 : reduce* ( seq quot -- result ) [ ] swap map-reduce ; inline
12
13 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
14
15 : higher ( a b quot -- c ) [ compare 0 > ] curry most ; inline
16
17 : lower  ( a b quot -- c ) [ compare 0 < ] curry most ; inline
18
19 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
20
21 : longer  ( a b -- c ) [ length ] higher ;
22
23 : shorter ( a b -- c ) [ length ] lower ;
24
25 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26
27 : longest ( seq -- item ) [ longer ] reduce* ;
28
29 : shortest ( seq -- item ) [ shorter ] reduce* ;
30
31 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
32
33 : bigger ( a b -- c ) [ ] higher ;
34
35 : smaller ( a b -- c ) [ ] lower ;
36
37 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
38
39 : biggest ( seq -- item ) [ bigger ] reduce* ;
40
41 : smallest ( seq -- item ) [ smaller ] reduce* ;
42
43 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
44
45 : minmax ( seq -- min max )
46     #! find the min and max of a seq in one pass
47     1/0. -1/0. rot [ tuck max >r min r> ] each ;
48