]> gitweb.factorcode.org Git - factor.git/commitdiff
Generics minimum and maximum added.
authornomennescio <nomennescio@factorcode.org>
Fri, 13 Oct 2023 20:47:02 +0000 (22:47 +0200)
committerJohn Benediktsson <mrjbq7@gmail.com>
Mon, 23 Oct 2023 17:28:52 +0000 (10:28 -0700)
For finite sequences infinum is minimum, supremum is maximum.
Runtime implementation on sequences uses (minimum) and (maximum).
Dispatch on object replaced by dispatch on sequence.
Inline generics for better optimizations.

core/sequences/sequences.factor

index 1ff92d16f77e0f6f1539ba348c019038b0a08572..5ec17cd5b245dfabbe0f0d52f2ceb448003dd775 100644 (file)
@@ -1141,16 +1141,24 @@ M: iota sum length dup 1 - * 2/ ; inline
 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: iota minimum first ; inline
+M: reversed minimum seq>> minimum ; inline
+
+GENERIC: maximum ( seq -- elt )
+M: sequence maximum (maximum) ; inline
+M: iota maximum last ; inline
+M: reversed maximum seq>> maximum ; inline
 
 GENERIC: infimum ( seq -- elt )
-M: object infimum [ ] [ min ] map-reduce ;
-M: iota infimum first ;
-M: reversed infimum seq>> infimum ;
+M: sequence infimum minimum ; inline
 
 GENERIC: supremum ( seq -- elt )
-M: object supremum [ ] [ max ] map-reduce ;
-M: iota supremum last ;
-M: reversed supremum seq>> supremum ;
+M: sequence supremum maximum ; inline
 
 : map-sum ( ... seq quot: ( ... elt -- ... n ) -- ... n )
     [ 0 ] 2dip [ dip + ] curry [ swap ] prepose each ; inline