]> gitweb.factorcode.org Git - factor.git/blob - extra/sequences/repeating/repeating.factor
71c0c5f7c9751a74807cc38798a409feb3d2e78e
[factor.git] / extra / sequences / repeating / repeating.factor
1 ! Copyright (C) 2008 Alex Chapman
2 ! Copyright (C) 2012 John Benediktsson
3 ! See https://factorcode.org/license.txt for BSD license
4 USING: accessors circular kernel math sequences ;
5 IN: sequences.repeating
6
7 TUPLE: cycles
8 { circular circular read-only }
9 { length integer read-only } ;
10
11 : <cycles> ( seq length -- cycles )
12     [ <circular> ] dip cycles boa ;
13
14 : cycle ( seq length -- new-seq )
15     dupd <cycles> swap like ;
16
17 : repeat ( seq times -- new-seq )
18     over length * cycle ;
19
20 M: cycles length length>> ;
21
22 M: cycles set-length length<< ;
23
24 M: cycles virtual@ circular>> ;
25
26 M: cycles virtual-exemplar circular>> ;
27
28 INSTANCE: cycles virtual-sequence
29
30 TUPLE: element-repeats < sequence-view
31 { times integer read-only } ;
32
33 C: <element-repeats> element-repeats
34
35 M: element-repeats length [ seq>> length ] [ times>> ] bi * ;
36
37 M: element-repeats virtual@ [ times>> /i ] [ seq>> ] bi ;
38
39 INSTANCE: element-repeats immutable-sequence
40
41 : repeat-elements ( seq times -- new-seq )
42     dupd <element-repeats> swap like ;