Groups and clumps - Factor Documentation (original) (raw)
Splitting a sequence into disjoint, fixed-length subsequences: group ( seq n -- array )
A virtual sequence for splitting a sequence into disjoint, fixed-length subsequences: groups
( seq n -- groups )
Splitting a sequence into overlapping, fixed-length subsequences: clump ( seq n -- array )
Splitting a sequence into overlapping, fixed-length subsequences, wrapping around the end of the sequence: circular-clump ( seq n -- array )
A virtual sequence for splitting a sequence into overlapping, fixed-length subsequences: clumps
( seq n -- clumps )
A virtual sequence for splitting a sequence into overlapping, fixed-length subsequences, wrapping around the end of the sequence: circular-clumps
( seq n -- clumps )
The difference can be summarized as the following:
• | With groups, the subsequences form the original sequence when concatenated:USING: grouping prettyprint ; { 1 2 3 4 } 2 group .{ { 1 2 } { 3 4 } }USING: grouping prettyprint sequences ; { 1 2 3 4 } dup 2 concat sequence= .t |
---|---|
• | With clumps, collecting the first element of each subsequence but the last one, together with the last subsequence, yields the original sequence:USING: grouping prettyprint ; { 1 2 3 4 } 2 clump .{ { 1 2 } { 2 3 } { 3 4 } }USING: grouping assocs sequences prettyprint ; { 1 2 3 4 } dup 2 unclip-last [ keys ] dip append sequence= .t |
• | With circular clumps, collecting the first element of each subsequence yields the original sequence. Collecting the nth element of each subsequence would rotate the original sequence n elements rightward:USING: grouping prettyprint ; { 1 2 3 4 } 2 circular-clump .{ { 1 2 } { 2 3 } { 3 4 } { 4 1 } }USING: grouping assocs sequences prettyprint ; { 1 2 3 4 } dup 2 keys sequence= .tUSING: grouping prettyprint ; { 1 2 3 4 } 2 [ second ] { } map-as .{ 2 3 4 1 } |
A combinator built using clumps: monotonic? ( seq quot: ( elt1 elt2 -- ? ) -- ? )
Testing how elements are related: all-eq? ( seq -- ? )
all-equal? ( seq -- ? )