diff --git a/extra/sequences/extras/extras-tests.factor b/extra/sequences/extras/extras-tests.factor index eeaa3e00eb..199e56d090 100644 --- a/extra/sequences/extras/extras-tests.factor +++ b/extra/sequences/extras/extras-tests.factor @@ -146,3 +146,6 @@ IN: sequences.extras.tests { V{ 1 } } [ 1 flatten1 ] unit-test { { 1 2 3 } } [ { 1 2 3 } flatten1 ] unit-test { { 1 2 3 { { 4 } } } } [ { 1 { 2 } { 3 { { 4 } } } } flatten1 ] unit-test + +{ t 3 3 } [ 10 iota [ [ odd? ] [ 1 > ] bi* and ] map-find-index ] unit-test +{ f f f } [ 10 iota [ [ odd? ] [ 9 > ] bi* and ] map-find-index ] unit-test diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index 60d8b43863..aa2e169f82 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -365,3 +365,10 @@ PRIVATE> ] [ , ] if ] ] keep dup branch? [ drop f ] unless make ; + +: (map-find-index) ( seq quot find-quot -- result elt index ) + [ [ f ] 2dip [ [ nip ] 2dip call dup ] curry ] dip call + [ [ [ drop f ] unless ] keep ] dip ; inline + +: map-find-index ( ... seq quot: ( ... elt index -- ... result/f ) -- ... result elt index ) + [ find-index ] (map-find-index) ; inline