: rewrite-paths ( seq quot: ( obj -- obj' ) -- ) '[ _ rewrite-path ] each ; inline recursive
: rewrite-vocab ( vocab quot: ( obj -- obj' ) -- )
- [ [ vocab>literals ] dip map-literals ] 2keep drop write-modern-vocab ; inline recursive
+ [ [ vocab>literals ] dip map-literals ] keepd write-modern-vocab ; inline recursive
: rewrite-string-exact ( string -- string' )
string>literals write-modern-string ;
[ to>> ] [ seq>> ] bi ?nth ;
: find-from* ( ... n seq quot: ( ... elt -- ... ? ) -- ... i elt ? )
- [ find-from ] 2keep drop
+ [ find-from ] keepd
pick [ drop t ] [ length -rot nip f ] if ; inline
: skip-blank-from ( n string -- n' string )
pick [
length swap [ - ] dip
] [
- [ nip ] dip [ [ length ] bi@ - ] 2keep drop
+ [ nip ] dip [ [ length ] bi@ - ] keepd
] if ; inline
[ dup length ] unless* tail-slice ; inline
: count-head ( seq quot -- n )
- [ not ] compose [ find drop ] 2keep drop length or ; inline
+ [ not ] compose [ find drop ] keepd length or ; inline
: count-tail ( seq quot -- n )
- [ not ] compose [ find-last drop ] 2keep drop
+ [ not ] compose [ find-last drop ] keepd
length swap [ - 1 - ] when* ; inline
:: interleaved-as ( seq glue exemplar -- newseq )