]> gitweb.factorcode.org Git - factor.git/blob - extra/sequences/merged/merged.factor
Merge branch 'master' into experimental (untested!)
[factor.git] / extra / sequences / merged / merged.factor
1 ! Copyright (C) 2008 Alex Chapman
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays kernel math sequences ;
4 IN: sequences.merged
5
6 TUPLE: merged seqs ;
7 C: <merged> merged
8
9 : <2merged> ( seq1 seq2 -- merged ) 2array <merged> ;
10 : <3merged> ( seq1 seq2 seq3 -- merged ) 3array <merged> ;
11
12 : merge ( seqs -- seq )
13     dup <merged> swap first like ;
14
15 : 2merge ( seq1 seq2 -- seq )
16     dupd <2merged> swap like ;
17
18 : 3merge ( seq1 seq2 seq3 -- seq )
19     pick >r <3merged> r> like ;
20
21 M: merged length seqs>> [ length ] map sum ;
22
23 M: merged virtual@ ( n seq -- n' seq' )
24     seqs>> [ length /mod ] [ nth ] bi ;
25
26 M: merged virtual-seq ( merged -- seq ) [ ] { } map-as ;
27
28 INSTANCE: merged virtual-sequence