IN: columns
! A column of a matrix
-TUPLE: column seq col ;
+TUPLE: column < sequence-view col ;
C: <column> column
-M: column virtual-exemplar seq>> ;
M: column virtual@ [ col>> swap ] [ seq>> ] bi nth bounds-check ;
-M: column length seq>> length ;
-
-INSTANCE: column virtual-sequence
: <flipped> ( seq -- seq' )
dup empty? [ dup first length [ <column> ] with map-integers ] unless ;
: 2map-index ( ... seq1 seq2 quot: ( ... elt1 elt2 index -- ... newelt ) -- ... newseq )
pick [ 2sequence-index-iterator ] dip map-integers-as ; inline
-TUPLE: evens { seq read-only } ;
+TUPLE: evens < sequence-view ;
C: <evens> evens
M: evens virtual@ [ 2 * ] [ seq>> ] bi* ; inline
-M: evens virtual-exemplar seq>> ; inline
-
-INSTANCE: evens virtual-sequence
-
-TUPLE: odds { seq read-only } ;
+TUPLE: odds < sequence-view ;
C: <odds> odds
M: odds virtual@ [ 2 * 1 + ] [ seq>> ] bi* ; inline
-M: odds virtual-exemplar seq>> ; inline
-
-INSTANCE: odds virtual-sequence
-
: until-empty ( seq quot -- )
[ dup empty? ] swap until drop ; inline
USING: accessors sequences ;
IN: sequences.frozen
-TUPLE: frozen { seq read-only } ;
+TUPLE: frozen < sequence-view ;
C: <frozen> frozen
-M: frozen virtual@ seq>> ;
-
-M: frozen virtual-exemplar seq>> ;
-
-M: frozen length seq>> length ;
-
-INSTANCE: frozen virtual-sequence
-
INSTANCE: frozen immutable-sequence
USING: accessors kernel math sequences ;
IN: sequences.rotated
-TUPLE: rotated
-{ seq read-only }
+TUPLE: rotated < sequence-view
{ n integer read-only } ;
C: <rotated> rotated
-M: rotated length seq>> length ;
-
M: rotated virtual@
[ n>> + ] [ seq>> ] bi [
length over 0 < [ + ] [
] if
] keep ;
-M: rotated virtual-exemplar seq>> ;
-
-INSTANCE: rotated virtual-sequence
-
: all-rotations ( seq -- seq' )
dup length <iota> [ <rotated> ] with map ;