]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences: add index-of-last
authorDoug Coleman <doug.coleman@gmail.com>
Sun, 31 Jul 2022 18:21:38 +0000 (13:21 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Sun, 31 Jul 2022 18:26:03 +0000 (13:26 -0500)
basis/documents/documents.factor
basis/ini-file/ini-file.factor
basis/json/reader/reader.factor
basis/math/combinatorics/combinatorics.factor
basis/persistent/vectors/vectors.factor
core/assocs/assocs.factor
core/io/pathnames/pathnames.factor
core/sequences/sequences.factor
extra/gap-buffer/gap-buffer.factor
extra/sequences/extras/extras.factor
extra/tensors/tensors.factor

index 65a20ab66bcbe0f70d51426500c09b5574df1c5c..6e02a734caa0d9137c588387079b3bae5c135d90 100644 (file)
@@ -88,7 +88,7 @@ CONSTANT: doc-start { 0 0 }
     0 swap [ append ] change-nth ;
 
 : append-last ( str seq -- )
-    [ length 1 - ] keep [ prepend ] change-nth ;
+    index-of-last [ prepend ] change-nth ;
 
 : loc-col/str ( loc document -- str col )
     [ first2 swap ] dip nth swap ;
index 8254b4059e8b83bd8d3bbd90ef7644d521686656..090c97efe080bf6b857607c23919d3bf858da46e 100644 (file)
@@ -68,7 +68,7 @@ IN: ini-file
     [ space? ] trim ;
 
 : unwrap ( str -- str' )
-    1 swap [ length 1 - ] keep subseq ;
+    1 swap index-of-last subseq ;
 
 : uncomment ( str -- str' )
     ";#" [ over index [ head ] when* ] each ;
index b47fada6ba9a3b839c77ad762a0f59552811ad56..a71a36ac092473948305163604b60ee199cb43c1 100644 (file)
@@ -70,7 +70,7 @@ DEFER: (read-json-string)
     [ length 2 - ] [ nth-unsafe ] bi ; inline
 
 : pop-unsafe ( seq -- elt )
-    [ length 1 - ] keep [ nth-unsafe ] [ shorten ] 2bi ; inline
+    index-of-last [ nth-unsafe ] [ shorten ] 2bi ; inline
 
 : check-length ( seq n -- seq )
     [ dup length ] [ >= ] bi* [ json-error ] unless ; inline
index 0b8713cc6b055678648a431378ec0834d148cdb6..ed3af83d7cf5ad3467c7f3436cb5a089139c965a 100644 (file)
@@ -270,7 +270,7 @@ INSTANCE: combinations immutable-sequence
     [ drop 1 + dup ] map! 2drop ; inline
 
 : increment-last ( seq -- )
-    [ [ length 1 - ] keep [ 1 + ] change-nth-unsafe ] unless-empty ; inline
+    [ index-of-last [ 1 + ] change-nth-unsafe ] unless-empty ; inline
 
 :: next-combination ( seq n -- seq )
     seq n find-max-index [
index 8910e99d3c1519b3f132c4a1cf512948797b40cb..b0aba0590ba07a506a9f10f9a2cedfa93c4dd676 100644 (file)
@@ -63,7 +63,7 @@ M: persistent-vector nth-unsafe
     dup full? [ [ level>> 1node ] keep swap ] [ node-add f ] if ;
 
 : new-last ( val seq -- seq' )
-    [ length 1 - ] keep new-nth ;
+    index-of-last new-nth ;
 
 : node-set-last ( child node -- node' )
     clone [ new-last ] change-children ;
index 2f661e74815cbf4b827d0552a59860694ae120ba..bb9fd94c38cd201c70875509ac170c5530feb3e6 100644 (file)
@@ -142,7 +142,7 @@ M: assoc values [ nip ] { } assoc>map ;
     assoc-size 0 = ; inline
 
 : assoc-stack ( key seq -- value )
-    [ length 1 - ] keep assoc-stack-from ; flushable
+    index-of-last assoc-stack-from ; flushable
 
 : assoc-subset? ( assoc1 assoc2 -- ? )
     [ at* [ = ] [ 2drop f ] if ] with-assoc assoc-all? ;
index 64bc3f762a73304dfb5a59bcc8d47550560e742a..d181b5c97a4ede5bf9d0b585cc38676e4537270f 100644 (file)
@@ -17,7 +17,7 @@ SYMBOL: current-directory
     [ path-separator? ] trim-head ;
 
 : last-path-separator ( path -- n ? )
-    [ length 1 - ] keep [ path-separator? ] find-last-from ;
+    index-of-last [ path-separator? ] find-last-from ;
 
 HOOK: root-directory? io-backend ( path -- ? )
 
index d9825b8b992e00598b1826a86c9837f062bd9f97..fe8b28cbfd14738c55bf70647beaebd4e524d1fc 100644 (file)
@@ -185,7 +185,7 @@ PRIVATE>
 : ?first ( seq -- elt/f ) 0 swap ?nth ; inline
 : ?second ( seq -- elt/f ) 1 swap ?nth ; inline
 : ?last ( seq -- elt/f )
-    [ length 1 - ] keep over 0 <
+    index-of-last over 0 <
     [ 2drop f ] [ nth-unsafe ] if ; inline
 
 MIXIN: virtual-sequence
@@ -249,6 +249,8 @@ M: slice length [ to>> ] [ from>> ] bi - ; inline
 
 : index-or-length ( seq n -- seq n' ) over length min ; inline
 
+: index-of-last ( seq -- n seq ) [ length 1 - ] keep ; inline
+
 : head-slice ( seq n -- slice ) head-to-index <slice> ; inline
 
 : tail-slice ( seq n -- slice ) index-to-tail <slice> ; inline
@@ -572,7 +574,7 @@ PRIVATE>
     '[ _ find-last-from-unsafe ] bounds-check-find ; inline
 
 : find-last ( ... seq quot: ( ... elt -- ... ? ) -- ... i elt )
-    [ [ length 1 - ] keep ] dip find-last-from ; inline
+    [ index-of-last ] dip find-last-from ; inline
 
 : find-index-from ( ... n seq quot: ( ... elt i -- ... ? ) -- ... i elt )
     '[
@@ -817,7 +819,7 @@ PRIVATE>
 : append! ( seq1 seq2 -- seq1 ) over push-all ; inline
 
 : last ( seq -- elt )
-    [ length 1 - ] keep
+    index-of-last
     over 0 < [ bounds-error ] [ nth-unsafe ] if ; inline
 
 <PRIVATE
@@ -828,7 +830,7 @@ PRIVATE>
 PRIVATE>
 
 : set-last ( elt seq -- )
-    [ length 1 - ] keep
+    index-of-last
     over 0 < [ bounds-error ] [ set-nth-unsafe ] if ; inline
 
 : pop* ( seq -- ) [ length 1 - ] [ shorten ] bi ;
@@ -888,7 +890,7 @@ PRIVATE>
     [ [ dup 1 + ] dip snip-slice ] keep append-as ;
 
 : pop ( seq -- elt )
-    [ length 1 - ] keep over 0 >=
+    index-of-last over 0 >=
     [ [ nth-unsafe ] [ shorten ] 2bi ]
     [ bounds-error ] if ;
 
index c4f1cf3d9149e0d56c56731cfcd460dc378ce2df..dc3cd28740935d6002093b2839ac9cb9e6e3bba5 100644 (file)
@@ -262,7 +262,7 @@ M: sequence insert*
 
 : pop-start ( gb -- elem ) 0 swap pop-elem ;
 
-: pop-end ( gb -- elem ) [ length 1 - ] keep pop-elem ;
+: pop-end ( gb -- elem ) index-of-last pop-elem ;
 
 : rotate-right ( gb -- )
     dup [ pop-end ] keep push-start drop ;
index e26bbb2ad787315b54d8299037f264e279c0d8e8..7c6bc05d0cef5e0b543f0129d5a9b601662e1407 100644 (file)
@@ -655,7 +655,7 @@ PRIVATE>
     ] bounds-check-find ; inline
 
 : find-last-index ( ... seq quot: ( ... elt i -- ... ? ) -- ... i elt )
-    [ [ length 1 - ] keep ] dip find-last-index-from ; inline
+    [ index-of-last ] dip find-last-index-from ; inline
 
 : map-find-last-index ( ... seq quot: ( ... elt index -- ... result/f ) -- ... result i elt )
     [ find-last-index ] (map-find-index) ; inline
index ef2bc0ae708844fb1e74d645d345d22450c23d73..157a82e6a341eee9d52cd7b6cd335e6944860c80 100644 (file)
@@ -465,7 +465,7 @@ PRIVATE>
     ! Compute the starting index
     / truncate dupd *
     ! Compute the ending index
-    swap over +
+    tuck +
     ! Take a slice
     rot <slice> ;