]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/utilities/utilities.factor
Merge branch 'master' into experimental (untested!)
[factor.git] / basis / compiler / utilities / utilities.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel sequences sequences.private arrays vectors fry
4 math.order ;
5 IN: compiler.utilities
6
7 : flattener ( seq quot -- seq vector quot' )
8     over length <vector> [
9         dup
10         '[
11             @ [
12                 dup array?
13                 [ _ push-all ] [ _ push ] if
14             ] when*
15         ]
16     ] keep ; inline
17
18 : flattening ( seq quot combinator -- seq' )
19     [ flattener ] dip dip { } like ; inline
20
21 : map-flat ( seq quot -- seq' ) [ each ] flattening ; inline
22
23 : 2map-flat ( seq quot -- seq' ) [ 2each ] flattening ; inline
24
25 : (3each) ( seq1 seq2 seq3 quot -- n quot' )
26     [ [ [ length ] tri@ min min ] 3keep ] dip
27     '[ [ _ nth-unsafe ] [ _ nth-unsafe ] [ _ nth-unsafe ] tri @ ] ; inline
28
29 : 3each ( seq1 seq2 seq3 quot -- seq ) (3each) each ; inline
30
31 : 3map ( seq1 seq2 seq3 quot -- seq ) (3each) map ; inline