Adding sequences.merged
parent
3a7faad878
commit
950419de4b
|
@ -0,0 +1 @@
|
|||
Alex Chapman
|
|
@ -0,0 +1,51 @@
|
|||
USING: help.markup help.syntax sequences ;
|
||||
IN: sequences.merged
|
||||
|
||||
ARTICLE: "sequences-merge" "Merging sequences"
|
||||
"When multiple sequences are merged into one sequence, the new sequence takes an element from each input sequence in turn. For example, if we merge " { $code "{ 1 2 3 }" } "and" { $code "{ \"a\" \"b\" \"c\" }" } "we get:" { $code "{ 1 \"a\" 2 \"b\" 3 \"c\" }" } "."
|
||||
{ $subsection merge }
|
||||
{ $subsection 2merge }
|
||||
{ $subsection 3merge }
|
||||
{ $subsection <merged> }
|
||||
{ $subsection <2merged> }
|
||||
{ $subsection <3merged> } ;
|
||||
|
||||
ABOUT: "sequences-merge"
|
||||
|
||||
HELP: merged
|
||||
{ $class-description "A virtual sequence which presents a merged view of its underlying elements. New instances are created by calling one of " { $link <merged> } ", " { $link <2merged> } ", or " { $link <3merged> } "." }
|
||||
{ $see-also merge } ;
|
||||
|
||||
HELP: <merged> ( seqs -- merged )
|
||||
{ $values { "seqs" "a sequence of sequences to merge" } { "merged" "a virtual sequence" } }
|
||||
{ $description "Creates an instance of the " { $link merged } " virtual sequence." }
|
||||
{ $see-also <2merged> <3merged> merge } ;
|
||||
|
||||
HELP: <2merged> ( seq1 seq2 -- merged )
|
||||
{ $values { "seq1" sequence } { "seq2" sequence } { "merged" "a virtual sequence" } }
|
||||
{ $description "Creates an instance of the " { $link merged } " virtual sequence which merges the two input sequences." }
|
||||
{ $see-also <merged> <3merged> 2merge } ;
|
||||
|
||||
HELP: <3merged> ( seq1 seq2 seq3 -- merged )
|
||||
{ $values { "seq1" sequence } { "seq2" sequence } { "seq3" sequence } { "merged" "a virtual sequence" } }
|
||||
{ $description "Creates an instance of the " { $link merged } " virtual sequence which merges the three input sequences." }
|
||||
{ $see-also <merged> <2merged> 3merge } ;
|
||||
|
||||
HELP: merge ( seqs -- seq )
|
||||
{ $values { "seqs" "a sequence of sequences to merge" } { "seq" "a new sequence" } }
|
||||
{ $description "Outputs a new sequence which merges the elements of each sequence in " { $snippet "seqs" } "." }
|
||||
{ $examples
|
||||
{ $example "USING: prettyprint sequences.merged ;" "{ { 1 2 } { 3 4 } { 5 6 } } merge ." "{ 1 3 5 2 4 6 }" }
|
||||
{ $example "USING: prettyprint sequences.merged ;" "{ \"abc\" \"def\" } merge ." "\"adbecf\"" }
|
||||
}
|
||||
{ $see-also 2merge 3merge <merged> } ;
|
||||
|
||||
HELP: 2merge ( seq1 seq2 -- seq )
|
||||
{ $values { "seq1" sequence } { "seq2" sequence } { "seq" "a new sequence" } }
|
||||
{ $description "Creates a new sequence of the same type as " { $snippet "seq1" } " which merges the elements of " { $snippet "seq1" } " and " { $snippet "seq2" } }
|
||||
{ $see-also merge 3merge <2merged> } ;
|
||||
|
||||
HELP: 3merge ( seq1 seq2 seq3 -- seq )
|
||||
{ $values { "seq1" sequence } { "seq2" sequence } { "seq3" sequence } { "seq" "a new sequence" } }
|
||||
{ $description "Creates a new sequence of the same type as " { $snippet "seq1" } " which merges the elements of all three sequences" }
|
||||
{ $see-also merge 2merge <3merged> } ;
|
|
@ -0,0 +1,17 @@
|
|||
USING: sequences sequences.merged tools.test ;
|
||||
IN: sequences.merged.tests
|
||||
|
||||
[ 0 { 1 2 } ] [ 0 T{ merged f { { 1 2 } { 3 4 } } } virtual@ ] unit-test
|
||||
[ 0 { 3 4 } ] [ 1 T{ merged f { { 1 2 } { 3 4 } } } virtual@ ] unit-test
|
||||
[ 1 { 1 2 } ] [ 2 T{ merged f { { 1 2 } { 3 4 } } } virtual@ ] unit-test
|
||||
[ 4 ] [ 3 { { 1 2 3 4 } } <merged> nth ] unit-test
|
||||
[ 4 { { 1 2 3 4 } } <merged> nth ] must-fail
|
||||
|
||||
[ 1 ] [ 0 { 1 2 3 } { 4 5 6 } <2merged> nth ] unit-test
|
||||
[ 4 ] [ 1 { 1 2 3 } { 4 5 6 } <2merged> nth ] unit-test
|
||||
[ 2 ] [ 2 { 1 2 3 } { 4 5 6 } <2merged> nth ] unit-test
|
||||
[ 5 ] [ 3 { 1 2 3 } { 4 5 6 } <2merged> nth ] unit-test
|
||||
[ 3 ] [ 4 { 1 2 3 } { 4 5 6 } <2merged> nth ] unit-test
|
||||
[ 6 ] [ 5 { 1 2 3 } { 4 5 6 } <2merged> nth ] unit-test
|
||||
|
||||
[ 4 ] [ 4 { 1 2 } { 3 4 } { 5 6 } 3merge nth ] unit-test
|
|
@ -0,0 +1,26 @@
|
|||
! Copyright (C) 2008 Alex Chapman
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors arrays kernel math sequences ;
|
||||
IN: sequences.merged
|
||||
|
||||
TUPLE: merged seqs ;
|
||||
C: <merged> merged
|
||||
|
||||
: <2merged> ( seq1 seq2 -- merged ) 2array <merged> ;
|
||||
: <3merged> ( seq1 seq2 seq3 -- merged ) 3array <merged> ;
|
||||
|
||||
: merge ( seqs -- seq )
|
||||
dup <merged> swap first like ;
|
||||
|
||||
: 2merge ( seq1 seq2 -- seq )
|
||||
dupd <2merged> rot like ;
|
||||
|
||||
: 3merge ( seq1 seq2 seq3 -- seq )
|
||||
pick >r <3merged> r> like ;
|
||||
|
||||
M: merged length seqs>> [ length ] map sum ;
|
||||
|
||||
M: merged virtual@ ( n seq -- n' seq' )
|
||||
seqs>> [ length /mod ] [ nth ] bi ;
|
||||
|
||||
INSTANCE: merged virtual-sequence
|
|
@ -0,0 +1 @@
|
|||
A virtual sequence which merges (interleaves) other sequences.
|
|
@ -0,0 +1 @@
|
|||
collections
|
Loading…
Reference in New Issue