{ 24 } [ { 1 2 } { 3 4 } [ + ] [ * ] 2map-reduce ] unit-test
{ 2 96 } [ 2 { 3 3 3 3 } { 4 4 4 4 } [ [ dup ] 2dip * * ] [ + ] 2map-reduce ] unit-test
-{ 4 } [ 5 <iota> (maximum) ] unit-test
-{ 0 } [ 5 <iota> (minimum) ] unit-test
{ 4 } [ 5 <iota> supremum ] unit-test
{ 0 } [ 5 <iota> infimum ] unit-test
{ 4 } [ 5 <iota> maximum ] unit-test
M: repetition sum [ elt>> ] [ length>> ] bi * ; inline
: product ( seq -- n ) 1 [ * ] binary-reduce ;
-: (minimum) ( seq -- n ) [ ] [ min ] map-reduce ;
-: (maximum) ( seq -- n ) [ ] [ max ] map-reduce ;
GENERIC: minimum ( seq -- elt )
-M: sequence minimum (minimum) ; inline
+M: sequence minimum [ ] [ min ] map-reduce ; inline
M: iota minimum drop 0 ; inline
M: reversed minimum seq>> minimum ; inline
M: repetition minimum elt>> ; inline
GENERIC: maximum ( seq -- elt )
-M: sequence maximum (maximum) ; inline
+M: sequence maximum [ ] [ max ] map-reduce ; inline
M: iota maximum n>> 1 - ; inline
M: reversed maximum seq>> maximum ; inline
M: repetition maximum elt>> ; inline
PRIVATE>
-M: cycles minimum dup full-cycle? [ circular>> minimum ] [ (minimum) ] if ; inline
-M: cycles maximum dup full-cycle? [ circular>> maximum ] [ (maximum) ] if ; inline
+M: cycles minimum dup full-cycle? [ circular>> minimum ] [ call-next-method ] if ; inline
+M: cycles maximum dup full-cycle? [ circular>> maximum ] [ call-next-method ] if ; inline
TUPLE: element-repeats < sequence-view
{ times integer read-only } ;