]> gitweb.factorcode.org Git - factor.git/blob - extra/math/ranges/ranges.factor
Initial import
[factor.git] / extra / math / ranges / ranges.factor
1 USING: kernel layouts math namespaces sequences sequences.private ;
2 IN: math.ranges
3
4 : >integer ( n -- i )
5     dup most-negative-fixnum most-positive-fixnum between?
6     [ >fixnum ] [ >bignum ] if ;
7
8 TUPLE: range from length step ;
9
10 : <range> ( from to step -- range )
11     >r over - r>
12     [ / 1+ 0 max >integer ] keep
13     range construct-boa ;
14
15 M: range length ( seq -- n )
16     range-length ;
17
18 M: range nth-unsafe ( n range -- obj )
19     [ range-step * ] keep range-from + ;
20
21 INSTANCE: range immutable-sequence
22
23 : twiddle 2dup > -1 1 ? ; inline
24
25 : (a, dup roll + -rot ; inline
26
27 : ,b) dup neg rot + swap ; inline
28
29 : [a,b] twiddle <range> ;
30
31 : (a,b] twiddle (a, <range> ;
32
33 : [a,b) twiddle ,b) <range> ;
34
35 : (a,b) twiddle (a, ,b) <range> ;
36
37 : [0,b] 0 swap [a,b] ;
38
39 : [1,b] 1 swap [a,b] ;
40
41 : [0,b) 0 swap (a,b] ;