diff --git a/extra/sequences/interleaved/authors.txt b/extra/sequences/interleaved/authors.txt new file mode 100644 index 0000000000..e091bb8164 --- /dev/null +++ b/extra/sequences/interleaved/authors.txt @@ -0,0 +1 @@ +John Benediktsson diff --git a/extra/sequences/interleaved/interleaved-tests.factor b/extra/sequences/interleaved/interleaved-tests.factor new file mode 100644 index 0000000000..1091117cd6 --- /dev/null +++ b/extra/sequences/interleaved/interleaved-tests.factor @@ -0,0 +1,7 @@ +USING: sequences.interleaved strings tools.test ; + +{ "" } [ "" CHAR: _ >string ] unit-test +{ "a" } [ "a" CHAR: _ >string ] unit-test +{ "a_b" } [ "ab" CHAR: _ >string ] unit-test +{ "a_b_c" } [ "abc" CHAR: _ >string ] unit-test +{ "a_b_c_d" } [ "abcd" CHAR: _ >string ] unit-test diff --git a/extra/sequences/interleaved/interleaved.factor b/extra/sequences/interleaved/interleaved.factor new file mode 100644 index 0000000000..680f971711 --- /dev/null +++ b/extra/sequences/interleaved/interleaved.factor @@ -0,0 +1,26 @@ +! Copyright (C) 2018 John Benediktsson. +! See http://factorcode.org/license.txt for BSD license. + +USING: accessors kernel math math.order sequences +sequences.private ; + +IN: sequences.interleaved + +TUPLE: interleaved { seq read-only } { elt read-only } ; + +C: interleaved + +M: interleaved length seq>> length dup 1 - + 0 max ; + +M: interleaved nth-unsafe + over even? [ + [ 2 / ] [ seq>> ] bi* nth-unsafe + ] [ + nip elt>> + ] if ; + +M: interleaved like seq>> like ; + +M: interleaved new-sequence seq>> new-sequence ; + +INSTANCE: interleaved immutable-sequence diff --git a/extra/sequences/interleaved/summary.txt b/extra/sequences/interleaved/summary.txt new file mode 100644 index 0000000000..7340d3d93c --- /dev/null +++ b/extra/sequences/interleaved/summary.txt @@ -0,0 +1 @@ +Interleaved sequences