splitting.monotonic: a bit faster.
parent
743928ae7d
commit
39055423ce
|
@ -7,19 +7,19 @@ IN: splitting.monotonic
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
:: ((monotonic-split)) ( seq quot slice-quot n -- pieces )
|
:: ((monotonic-split)) ( seq quot slice-quot n -- pieces )
|
||||||
V{ } clone :> accum
|
V{ 0 } clone :> accum
|
||||||
|
|
||||||
0 0 seq [ ] [
|
0 seq [ ] [
|
||||||
[ 1 + ] 2dip [
|
[ 1 + ] 2dip [
|
||||||
quot call [
|
quot call [ dup accum push ] unless
|
||||||
[ seq slice-quot call accum push ] keep dup
|
|
||||||
] unless
|
|
||||||
] keep
|
] keep
|
||||||
] map-reduce drop
|
] map-reduce drop
|
||||||
|
|
||||||
n = [ drop ] [ n seq slice-quot call accum push ] if
|
n = [ n accum push ] unless
|
||||||
|
|
||||||
accum { } like ; inline
|
accum dup rest-slice [
|
||||||
|
seq slice-quot call
|
||||||
|
] { } 2map-as ; inline
|
||||||
|
|
||||||
: (monotonic-split) ( seq quot slice-quot -- pieces )
|
: (monotonic-split) ( seq quot slice-quot -- pieces )
|
||||||
pick length [ 3drop { } ] [ ((monotonic-split)) ] if-zero ; inline
|
pick length [ 3drop { } ] [ ((monotonic-split)) ] if-zero ; inline
|
||||||
|
|
Loading…
Reference in New Issue