add butlast and butlast-slice with docs
parent
0b21c84e75
commit
e771314833
|
@ -92,6 +92,7 @@ ARTICLE: "sequences-slices" "Subsequences and slices"
|
|||
{ $subsection subseq }
|
||||
{ $subsection head }
|
||||
{ $subsection tail }
|
||||
{ $subsection butlast }
|
||||
{ $subsection rest }
|
||||
{ $subsection head* }
|
||||
{ $subsection tail* }
|
||||
|
@ -106,6 +107,7 @@ ARTICLE: "sequences-slices" "Subsequences and slices"
|
|||
{ $subsection <slice> }
|
||||
{ $subsection head-slice }
|
||||
{ $subsection tail-slice }
|
||||
{ $subsection butlast-slice }
|
||||
{ $subsection rest-slice }
|
||||
{ $subsection head-slice* }
|
||||
{ $subsection tail-slice* }
|
||||
|
@ -836,11 +838,16 @@ HELP: tail-slice
|
|||
{ $description "Outputs a virtual sequence sharing storage with all elements from the " { $snippet "n" } "th index until the end of the input sequence." }
|
||||
{ $errors "Throws an error if the index is out of bounds." } ;
|
||||
|
||||
HELP: butlast-slice
|
||||
{ $values { "seq" sequence } { "slice" "a slice" } }
|
||||
{ $description "Outputs a virtual sequence sharing storage with all but the last element of the input sequence." }
|
||||
{ $errors "Throws an error on an empty sequence." } ;
|
||||
|
||||
HELP: rest-slice
|
||||
{ $values { "seq" sequence } { "slice" "a slice" } }
|
||||
{ $description "Outputs a virtual sequence sharing storage with all elements from the 1st index until the end of the input sequence." }
|
||||
{ $notes "Equivalent to " { $snippet "1 tail" } }
|
||||
{ $errors "Throws an error if the index is out of bounds." } ;
|
||||
{ $errors "Throws an error on an empty sequence." } ;
|
||||
|
||||
HELP: head-slice*
|
||||
{ $values { "seq" sequence } { "n" "a non-negative integer" } { "slice" "a slice" } }
|
||||
|
@ -862,6 +869,11 @@ HELP: tail
|
|||
{ $description "Outputs a new sequence consisting of the input sequence with the first n items removed." }
|
||||
{ $errors "Throws an error if the index is out of bounds." } ;
|
||||
|
||||
HELP: butlast
|
||||
{ $values { "seq" sequence } { "headseq" "a new sequence" } }
|
||||
{ $description "Outputs a new sequence consisting of the input sequence with the last item removed." }
|
||||
{ $errors "Throws an error on an empty sequence." } ;
|
||||
|
||||
HELP: rest
|
||||
{ $values { "seq" sequence } { "tailseq" "a new sequence" } }
|
||||
{ $description "Outputs a new sequence consisting of the input sequence with the first item removed." }
|
||||
|
|
|
@ -216,6 +216,8 @@ M: slice length dup slice-to swap slice-from - ;
|
|||
|
||||
: tail-slice* ( seq n -- slice ) from-end tail-slice ;
|
||||
|
||||
: butlast-slice ( seq -- slice ) 1 head-slice* ;
|
||||
|
||||
INSTANCE: slice virtual-sequence
|
||||
|
||||
! One element repeated many times
|
||||
|
@ -263,6 +265,8 @@ PRIVATE>
|
|||
|
||||
: tail* ( seq n -- tailseq ) from-end tail ;
|
||||
|
||||
: butlast ( seq -- headseq ) 1 head* ;
|
||||
|
||||
: copy ( src i dst -- )
|
||||
pick length >r 3dup check-copy spin 0 r>
|
||||
(copy) drop ; inline
|
||||
|
@ -671,13 +675,13 @@ PRIVATE>
|
|||
[ rest ] [ first ] bi ;
|
||||
|
||||
: unclip-last ( seq -- butfirst last )
|
||||
[ 1 head* ] [ peek ] bi ;
|
||||
[ butlast ] [ peek ] bi ;
|
||||
|
||||
: unclip-slice ( seq -- rest first )
|
||||
[ rest-slice ] [ first ] bi ;
|
||||
|
||||
: unclip-last-slice ( seq -- butfirst last )
|
||||
[ 1 head-slice* ] [ peek ] bi ;
|
||||
[ butlast-slice ] [ peek ] bi ;
|
||||
|
||||
: <flat-slice> ( seq -- slice )
|
||||
dup slice? [ { } like ] when 0 over length rot <slice> ;
|
||||
|
|
Loading…
Reference in New Issue