From: Doug Coleman Date: Fri, 22 Jul 2022 21:55:20 +0000 (-0500) Subject: core: (head) (tail) from-end -> from-tail. add cramp X-Git-Tag: 0.99~1303 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=105f51238b6725b1d227d8f9e266795907238df5 core: (head) (tail) from-end -> from-tail. add cramp --- diff --git a/core/io/io.factor b/core/io/io.factor index 9becbca5a6..36ea5e009d 100644 --- a/core/io/io.factor +++ b/core/io/io.factor @@ -124,7 +124,7 @@ SYMBOL: error-stream : (read-into) ( buf stream quot -- buf-slice/f ) [ dup length over ] 2dip call - [ (head) ] [ zero? not ] bi ; inline + [ head-to-index ] [ zero? not ] bi ; inline PRIVATE> diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor index 00ce9f3f44..840fc92795 100644 --- a/core/sequences/sequences.factor +++ b/core/sequences/sequences.factor @@ -135,12 +135,6 @@ INSTANCE: iota immutable-sequence [ [ nth-unsafe ] curry bi@ ] [ [ set-nth-unsafe ] curry bi@ ] 3bi ; inline -: (head) ( seq n -- from to seq ) [ 0 ] 2dip swap ; inline - -: (tail) ( seq n -- from to seq ) swap [ length ] keep ; inline - -: from-end ( seq n -- seq n' ) [ dup length ] dip - ; inline - : (1sequence) ( obj seq -- seq ) [ 0 swap set-nth-unsafe ] keep ; inline @@ -155,6 +149,12 @@ INSTANCE: iota immutable-sequence PRIVATE> +: head-to-index ( seq to -- zero to seq ) [ 0 ] 2dip swap ; inline + +: index-to-tail ( seq from -- from length seq ) swap [ length ] keep ; inline + +: from-tail ( seq n -- seq n' ) [ dup length ] dip - ; inline + : 1sequence ( obj exemplar -- seq ) 1 swap [ (1sequence) ] new-like ; inline @@ -249,15 +249,17 @@ M: slice length [ to>> ] [ from>> ] bi - ; inline : short ( seq n -- seq n' ) over length min ; inline -: head-slice ( seq n -- slice ) (head) ; inline +: cramp ( seq n -- seq n' ) over length min ; inline + +: head-slice ( seq n -- slice ) head-to-index ; inline -: tail-slice ( seq n -- slice ) (tail) ; inline +: tail-slice ( seq n -- slice ) index-to-tail ; inline : rest-slice ( seq -- slice ) 1 tail-slice ; inline -: head-slice* ( seq n -- slice ) from-end head-slice ; inline +: head-slice* ( seq n -- slice ) from-tail head-slice ; inline -: tail-slice* ( seq n -- slice ) from-end tail-slice ; inline +: tail-slice* ( seq n -- slice ) from-tail tail-slice ; inline : but-last-slice ( seq -- slice ) 1 head-slice* ; inline @@ -339,15 +341,15 @@ PRIVATE> : subseq ( from to seq -- subseq ) dup subseq-as ; -: head ( seq n -- headseq ) (head) subseq ; +: head ( seq n -- headseq ) head-to-index subseq ; -: tail ( seq n -- tailseq ) (tail) subseq ; +: tail ( seq n -- tailseq ) index-to-tail subseq ; : rest ( seq -- tailseq ) 1 tail ; -: head* ( seq n -- headseq ) from-end head ; +: head* ( seq n -- headseq ) from-tail head ; -: tail* ( seq n -- tailseq ) from-end tail ; +: tail* ( seq n -- tailseq ) from-tail tail ; : but-last ( seq -- headseq ) 1 head* ;