diff --git a/extra/sequences/extras/extras-tests.factor b/extra/sequences/extras/extras-tests.factor index d9b0b9c27c..4d16eb2abd 100644 --- a/extra/sequences/extras/extras-tests.factor +++ b/extra/sequences/extras/extras-tests.factor @@ -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 diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index 26e17f654a..ef04243ff4 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -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 ;