diff --git a/core/classes/algebra/algebra-tests.factor b/core/classes/algebra/algebra-tests.factor index 665fc86ebb..350c2fd66f 100755 --- a/core/classes/algebra/algebra-tests.factor +++ b/core/classes/algebra/algebra-tests.factor @@ -13,8 +13,6 @@ IN: classes.algebra.tests \ flatten-class must-infer \ flatten-builtin-class must-infer -: class= ( cls1 cls2 -- ? ) [ class<= ] [ swap class<= ] 2bi and ; - : class-and* ( cls1 cls2 cls3 -- ? ) >r class-and r> class= ; : class-or* ( cls1 cls2 cls3 -- ? ) >r class-or r> class= ; diff --git a/core/classes/algebra/algebra.factor b/core/classes/algebra/algebra.factor index 00657f48c4..23695c06f8 100755 --- a/core/classes/algebra/algebra.factor +++ b/core/classes/algebra/algebra.factor @@ -186,6 +186,9 @@ M: anonymous-complement (classes-intersect?) [ [ rank-class ] bi@ < ] } cond ; +: class= ( first second -- ? ) + [ class<= ] [ swap class<= ] 2bi and ; + : largest-class ( seq -- n elt ) dup [ [ class< ] with contains? not ] curry find-last [ "Topological sort failed" throw ] unless* ; diff --git a/core/generic/math/math.factor b/core/generic/math/math.factor index 1c1368a6c2..834e19d9d9 100755 --- a/core/generic/math/math.factor +++ b/core/generic/math/math.factor @@ -22,8 +22,14 @@ PREDICATE: math-class < class [ drop { 100 100 } ] } cond ; -: math-class-max ( class class -- class ) - [ [ math-precedence ] compare +gt+ eq? ] most ; +: math-class<=> ( class1 class2 -- class ) + [ math-precedence ] compare +gt+ eq? ; + +: math-class-max ( class1 class2 -- class ) + [ math-class<=> ] most ; + +: math-class-min ( class1 class2 -- class ) + [ swap math-class<=> ] most ; : (math-upgrade) ( max class -- quot ) dupd = [ drop [ ] ] [ "coercer" word-prop [ ] or ] if ;