]> gitweb.factorcode.org Git - factor.git/blob - basis/math/vectors/ranges/ranges.factor
Add range methods
[factor.git] / basis / math / vectors / ranges / ranges.factor
1 ! Copyright (C) 2023 Keldan Chapman.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors kernel math math.order math.vectors ranges
4 ranges.private ;
5 IN: math.vectors
6
7 M: range vneg >range< [ neg ] tri@ <range> ;
8
9 M: range v+n [ >range< ] dip '[ [ _ + ] bi@ ] dip <range> ;
10 M: range n+v swap v+n ;
11
12 M: range v-n neg v+n ;
13 M: range n-v >range< roll '[ [ _ swap - ] bi@ ] dip neg <range> ;
14
15 M: range v*n [ >range< ] dip '[ _ * ] tri@ <range> ;
16 M: range n*v swap v*n ;
17
18 M: range v/n recip v*n ;
19
20 M: range v+ over range? [
21         [ [ from>> ] bi@ + ]
22         [ [ length>> ] bi@ min ]
23         [ [ step>> ] bi@ + ] 2tri \ range boa
24     ] [ call-next-method ] if ;
25
26 M: range v- >range< [ neg ] tri@ <range> v+ ;
27
28 M: range vavg over range?
29     [ v+ 2 v/n ]
30     [ call-next-method ] if ;