]> gitweb.factorcode.org Git - factor.git/blob - extra/sequences/repeating/repeating.factor
sequences.repeating: rename repeating to cycle and add repeat
[factor.git] / extra / sequences / repeating / repeating.factor
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
6
7 TUPLE: cycles circular length ;
8
9 : <cycles> ( seq length -- cycles )
10     [ <circular> ] dip cycles boa ;
11
12 : cycle ( seq length -- new-seq )
13     dupd <cycles> swap like ;
14
15 M: cycles length length>> ;
16 M: cycles set-length length<< ;
17
18 M: cycles virtual@ ( n seq -- n' seq' ) circular>> ;
19
20 M: cycles virtual-exemplar circular>> ;
21
22 INSTANCE: cycles virtual-sequence
23
24 TUPLE: repeats seq length ;
25
26 : <repeats> ( seq times -- repeats )
27     [ dup length ] dip * repeats boa ;
28
29 : repeat ( seq times -- new-seq )
30     dupd <repeats> swap like ;
31
32 M: repeats length length>> ;
33
34 M: repeats nth-unsafe seq>> [ length /i ] keep nth ;
35
36 INSTANCE: repeats immutable-sequence