106 lines
3.1 KiB
Factor
106 lines
3.1 KiB
Factor
! Copyright (C) 2009 Doug Coleman.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: help.markup help.syntax kernel quotations classes sequences ;
|
|
IN: splitting.monotonic
|
|
|
|
HELP: monotonic-split-slice
|
|
{ $values
|
|
{ "seq" sequence } { "quot" { $quotation ( obj1 obj2 -- ? ) } }
|
|
{ "pieces" "a sequence of slices" }
|
|
}
|
|
{ $description "Monotonically splits a sequence into slices." }
|
|
{ $examples
|
|
{ $example
|
|
"USING: splitting.monotonic math prettyprint ;"
|
|
"{ 1 2 3 2 3 4 } [ < ] monotonic-split-slice ."
|
|
"{
|
|
T{ slice { to 3 } { seq { 1 2 3 2 3 4 } } }
|
|
T{ slice { from 3 } { to 6 } { seq { 1 2 3 2 3 4 } } }
|
|
}"
|
|
}
|
|
} ;
|
|
|
|
HELP: monotonic-split
|
|
{ $values
|
|
{ "seq" sequence } { "quot" quotation }
|
|
{ "pieces" "a sequence of sequences" }
|
|
}
|
|
{ $description "Splits a sequence into subsequences, in which for all consecutive pairs of elements the quotation returns true." }
|
|
{ $examples
|
|
{ $example
|
|
"USING: splitting.monotonic math prettyprint ;"
|
|
"{ 1 2 3 2 3 4 } [ < ] monotonic-split ."
|
|
"{ { 1 2 3 } { 2 3 4 } }"
|
|
}
|
|
{ $example
|
|
"USING: splitting.monotonic math prettyprint ;"
|
|
"{ 1 2 3 2 1 0 } [ < ] monotonic-split ."
|
|
"{ { 1 2 3 } { 2 } { 1 } { 0 } }"
|
|
}
|
|
} ;
|
|
|
|
{ monotonic-split monotonic-split-slice } related-words
|
|
|
|
HELP: downward-slices
|
|
{ $values
|
|
{ "seq" sequence }
|
|
{ "slices" "a sequence of downward-slices" }
|
|
}
|
|
{ $description "Returns an array of monotonically decreasing slices of type " { $link downward-slice } ". Slices of one element are discarded." } ;
|
|
|
|
HELP: stable-slices
|
|
{ $values
|
|
{ "seq" sequence }
|
|
{ "slices" "a sequence of stable-slices" }
|
|
}
|
|
{ $description "Returns an array of monotonically decreasing slices of type " { $link downward-slice } ". Slices of one element are discarded." } ;
|
|
|
|
HELP: upward-slices
|
|
{ $values
|
|
{ "seq" sequence }
|
|
{ "slices" "a sequence of upward-slices" }
|
|
}
|
|
{ $description "Returns an array of monotonically increasing slices of type " { $link downward-slice } ". Slices of one element are discarded." } ;
|
|
|
|
HELP: trends
|
|
{ $values
|
|
{ "seq" sequence }
|
|
{ "slices" "a sequence of downward, stable, and upward slices" }
|
|
}
|
|
{ $description "Returns a sorted sequence of downward, stable, or upward slices. The endpoints of some slices may overlap with each other." }
|
|
{ $examples
|
|
{ $example
|
|
"USING: splitting.monotonic math prettyprint ;"
|
|
"{ 1 2 3 3 2 1 } trends ."
|
|
"{
|
|
T{ upward-slice { to 3 } { seq { 1 2 3 3 2 1 } } }
|
|
T{ stable-slice
|
|
{ from 2 }
|
|
{ to 4 }
|
|
{ seq { 1 2 3 3 2 1 } }
|
|
}
|
|
T{ downward-slice
|
|
{ from 3 }
|
|
{ to 6 }
|
|
{ seq { 1 2 3 3 2 1 } }
|
|
}
|
|
}"
|
|
}
|
|
} ;
|
|
|
|
ARTICLE: "splitting.monotonic" "Splitting trending sequences"
|
|
"The " { $vocab-link "splitting.monotonic" } " vocabulary splits sequences that are trending downwards, upwards, or stably." $nl
|
|
"Splitting into sequences:"
|
|
{ $subsections monotonic-split }
|
|
"Splitting into slices:"
|
|
{ $subsections monotonic-split-slice }
|
|
"Trending:"
|
|
{ $subsections
|
|
downward-slices
|
|
stable-slices
|
|
upward-slices
|
|
trends
|
|
} ;
|
|
|
|
ABOUT: "splitting.monotonic"
|