diff --git a/extra/sequences/snipped/authors.txt b/extra/sequences/snipped/authors.txt new file mode 100644 index 0000000000..e091bb8164 --- /dev/null +++ b/extra/sequences/snipped/authors.txt @@ -0,0 +1 @@ +John Benediktsson diff --git a/extra/sequences/snipped/snipped-tests.factor b/extra/sequences/snipped/snipped-tests.factor new file mode 100644 index 0000000000..49eb46e911 --- /dev/null +++ b/extra/sequences/snipped/snipped-tests.factor @@ -0,0 +1,9 @@ +! Copyright (C) 2013 John Benediktsson +! See http://factorcode.org/license.txt for BSD license +USING: arrays sequences tools.test ; +IN: sequences.snipped + +{ { 0 1 2 5 6 } } [ 3 5 7 iota >array ] unit-test +{ { 0 1 2 } } [ 3 10 7 iota >array ] unit-test +{ { 6 } } [ -1 5 7 iota >array ] unit-test +{ { } } [ -1 10 7 iota >array ] unit-test diff --git a/extra/sequences/snipped/snipped.factor b/extra/sequences/snipped/snipped.factor new file mode 100644 index 0000000000..ff10b32e9f --- /dev/null +++ b/extra/sequences/snipped/snipped.factor @@ -0,0 +1,25 @@ +! Copyright (C) 2013 John Benediktsson +! See http://factorcode.org/license.txt for BSD license +USING: accessors kernel math math.order sequences ; +IN: sequences.snipped + +TUPLE: snipped +{ seq sequence read-only } +{ from integer read-only } +{ length integer read-only } ; + +: ( from to seq -- snipped ) + [ length min ] keep -rot over - snipped boa ; + +: ( i seq -- snipped ) + [ dup 1 + ] dip ; + +M: snipped length [ seq>> length ] [ length>> ] bi [-] ; + +M: snipped virtual@ + [ [ from>> dupd >= ] keep [ length>> + ] curry when ] + [ seq>> ] bi ; + +M: snipped virtual-exemplar seq>> ; + +INSTANCE: snipped virtual-sequence diff --git a/extra/sequences/snipped/summary.txt b/extra/sequences/snipped/summary.txt new file mode 100644 index 0000000000..52bc155b99 --- /dev/null +++ b/extra/sequences/snipped/summary.txt @@ -0,0 +1 @@ +Snipped virtual sequences