1 ! Copyright (C) 2008 Alex Chapman
2 ! Copyright (C) 2012 John Benediktsson
3 ! See http;//factorcode.org/license.txt for BSD license
4 USING: accessors circular kernel math sequences sequences.private ;
5 IN: sequences.repeating
7 TUPLE: cycles circular length ;
9 : <cycles> ( seq length -- cycles )
10 [ <circular> ] dip cycles boa ;
12 : cycle ( seq length -- new-seq )
13 dupd <cycles> swap like ;
15 M: cycles length length>> ;
16 M: cycles set-length length<< ;
18 M: cycles virtual@ ( n seq -- n' seq' ) circular>> ;
20 M: cycles virtual-exemplar circular>> ;
22 INSTANCE: cycles virtual-sequence
24 TUPLE: repeats seq length ;
26 : <repeats> ( seq times -- repeats )
27 [ dup length ] dip * repeats boa ;
29 : repeat ( seq times -- new-seq )
30 dupd <repeats> swap like ;
32 M: repeats length length>> ;
34 M: repeats nth-unsafe seq>> [ length /i ] keep nth ;
36 INSTANCE: repeats immutable-sequence