@@ -124,15 +124,20 @@ end
124
124
function monomial_lt (degs1, degs2)
125
125
d1 = sum (last, degs1, init= 0 )
126
126
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)
128
131
end
129
132
130
133
function 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
136
141
end
137
142
end
138
143
return false # they are equal
0 commit comments