@@ -124,15 +124,20 @@ end
124124function monomial_lt (degs1, degs2)
125125 d1 = sum (last, degs1, init= 0 )
126126 d2 = sum (last, degs2, init= 0 )
127- d1 != d2 ? d1 < d2 : lexlt (degs1, degs2)
127+ d1 != d2 ?
128+ # lower absolute degree first, or if equal, positive degree first
129+ (abs (d1) < abs (d2) || abs (d1) == abs (d2) && d1 > d2) :
130+ lexlt (degs1, degs2)
128131end
129132
130133function lexlt (degs1, degs2)
131- for (a, b) in zip (degs1, degs2)
132- if a[1 ] == b[1 ] && a[2 ] != b[2 ]
133- return a[2 ] > b[2 ] # higher degree first
134- elseif a[1 ] != b[1 ]
135- return a[1 ] < b[1 ] # lexicographic order for the base
134+ for ((a_base, a_deg), (b_base, b_deg)) in zip (degs1, degs2)
135+ if a_base == b_base && a_deg != b_deg
136+ # same base, higher absolute degree first, positive degree first
137+ return abs (a_deg) > abs (b_deg) || abs (a_deg) == abs (b_deg) && a_deg > b_deg
138+ elseif a_base != b_base
139+ # lexicographic order for the base
140+ return a_base < b_base
136141 end
137142 end
138143 return false # they are equal
0 commit comments