Revert "Revert "Made use of ::= in core libraries and defined a RebindError condition...
[cslatevm.git] / src / lib / numericMixin.slate
blob332f5af465df709683c3b1c23910d58a80d1ee92
1 define: #NumericMixin &parents: {Mixin}.
3 t@(NumericMixin traits) as: x@(Number traits)
5   t collect: #(as: n) `er
6 ].
8 t@(NumericMixin traits) + n@(Number traits)
10   t collect: #(+ n) `er
13 t@(NumericMixin traits) + u@(NumericMixin traits)
15   t with: u collect: #+ `er
18 t@(NumericMixin traits) * n@(Number traits)
20   t collect: #(* n) `er
23 t@(NumericMixin traits) * u@(NumericMixin traits)
25   t with: u collect: #* `er
28 t@(NumericMixin traits) / n@(Number traits)
30   t collect: #(/ n) `er
33 t@(NumericMixin traits) / u@(NumericMixin traits)
35   t with: u collect: #/ `er
38 t@(NumericMixin traits) // n@(Number traits)
40   t collect: #(// n) `er
43 t@(NumericMixin traits) // u@(NumericMixin traits)
45   t with: u collect: #// `er
48 t@(NumericMixin traits) \\ n@(Number traits)
50   t collect: #(\\ n) `er
53 t@(NumericMixin traits) \\ u@(NumericMixin traits)
55   t with: u collect: #\\ `er
58 t@(NumericMixin traits) isNegative
60   t collect: #isNegative `er
63 t@(NumericMixin traits) abs
65   t collect: #abs `er
68 t@(NumericMixin traits) - x
70   t collect: [| :each | each + x negated]
73 t@(NumericMixin traits) isZero
75   (contents detect: [| :each | each isZero not]) isNil
78 c@(NumericMixin traits) min
80   c inject: c anyOne into: #min: `er
83 c@(NumericMixin traits) max
85   c inject: c anyOne into: #max: `er
88 c@(NumericMixin traits) range
90   c max - c min
93 c@(NumericMixin traits) median
95   (c as: SortedArray) median
98 c@(NumericMixin traits) average
100   c sum / c size
103 c@(NumericMixin traits) sum
104 "Kludge to include unit'd measurement support."
106   (c inject: 0 into: #+ `er) - c anyOne
109 c@(NumericMixin traits) <= d@(NumericMixin traits)
111   c doWithIndex: [| :index | (c at: index) <= (d at: index)
112     ifFalse: [^ False]].
113   True
116 c@(NumericMixin traits) >= d@(NumericMixin traits)
118   c doWithIndex: [| :index | (c at: index) >= (d at: index)
119     ifFalse: [^ False]].
120   True
123 c@(NumericMixin traits) < d@(NumericMixin traits)
125   c doWithIndex: [| :index | (c at: index) < (d at: index)
126     ifFalse: [^ False]].
127   True
130 c@(NumericMixin traits) > d@(NumericMixin traits)
132   c doWithIndex: [| :index | (c at: index) > (d at: index)
133     ifFalse: [^ False]].
134   True