]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences.extras: implement "insert-nth!".
authorJohn Benediktsson <mrjbq7@gmail.com>
Tue, 23 Oct 2012 23:10:15 +0000 (16:10 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Tue, 23 Oct 2012 23:10:15 +0000 (16:10 -0700)
extra/sequences/extras/extras-tests.factor
extra/sequences/extras/extras.factor

index d9b0b9c27c4bd6ed170a65fc8e0f79e839c5986f..4d16eb2abd423a702a4f1a3aef5445189541bc7c 100644 (file)
@@ -149,3 +149,6 @@ IN: sequences.extras.tests
 
 { "" } [ { } "" reverse-as ] unit-test
 { "ABC" } [ { 67 66 65 } "" reverse-as ] unit-test
+
+{ V{ 1 } } [ 1 0 V{ } [ insert-nth! ] keep ] unit-test
+{ V{ 1 2 3 4 } } [ 2 1 V{ 1 3 4 } [ insert-nth! ] keep ] unit-test
index 26e17f654a53fa109d2cf9a27e1fe40017ee186c..ef04243ff4ef5e6ef19dddedcfc7fab8c0a66f69 100644 (file)
@@ -1,6 +1,6 @@
-USING: accessors arrays assocs fry grouping kernel locals make
-math math.order math.ranges sequences sequences.private
-splitting ;
+USING: accessors arrays assocs fry grouping growable kernel
+locals make math math.order math.ranges sequences
+sequences.private splitting ;
 FROM: sequences => change-nth ;
 IN: sequences.extras
 
@@ -339,3 +339,8 @@ PRIVATE>
 
 : map-product ( ... seq quot: ( ... elt -- ... n ) -- ... n )
     [ 1 ] 2dip [ dip * ] curry [ swap ] prepose each ; inline
+
+: insert-nth! ( elt n seq -- )
+    [ length ] keep ensure swap pick (a,b]
+    over '[ [ 1 + ] keep _ move-unsafe ] each
+    set-nth-unsafe ;