@@ -192,112 +192,46 @@ public List<Expr> getExprs() {
192192 public static final Expr MULT = new MultExpr ();
193193
194194 public static Polynomial eval (Expr expr ) {
195- return switch (expr ) {
195+ Expr exprs = Macro .applyStarMacro (expr .getExprs ());
196+ return switch (exprs ) {
196197 case PlusListExpr listExpr -> {
197198 if (listExpr .value .size () == 1 ) {
198199 yield eval (listExpr .value ().getFirst ());
199200 }
200- Expr exprs = Macro .applyStarMacro (listExpr .value );
201201 if (exprs .size () == 1 ) {
202202 yield eval (exprs .getFirst ());
203203 }
204- Polynomial result ;
205- if (hasPlus (exprs )) {
206- result = Polynomial .ZERO ;
207- int sign = 1 ;
208- for (Expr exp : exprs .getExprs ()) {
209- if (isMinus (exp )) {
210- sign = -1 ;
211- continue ;
212- }
213- if (isPlus (exp )) {
214- sign = 1 ;
215- continue ;
216- }
217- Polynomial p = eval (exp );
218- result = result .add (p .multiply (sign ));
204+ Polynomial result = Polynomial .ZERO ;
205+ int sign = 1 ;
206+ for (Expr exp : exprs .getExprs ()) {
207+ if (isMinus (exp )) {
208+ sign = -1 ;
209+ continue ;
219210 }
220- } else {
221- result = Polynomial .ONE ;
222- for (Expr exp : exprs .getExprs ()) {
223- if (isOperator (exp )) {
224- continue ;
225- }
226- Polynomial p = eval (exp );
227- result = result .multiply (p );
211+ if (isPlus (exp )) {
212+ sign = 1 ;
213+ continue ;
228214 }
215+ Polynomial p = eval (exp );
216+ result = result .add (p .multiply (sign ));
229217 }
230218 yield result ;
231219 }
232220 case MultListExpr listExpr -> {
233221 if (listExpr .value .size () == 1 ) {
234222 yield eval (listExpr .value ().getFirst ());
235223 }
236- Expr exprs = Macro .applyStarMacro (listExpr .value );
237224 if (exprs .size () == 1 ) {
238225 yield eval (exprs .getFirst ());
239226 }
240227 Polynomial result ;
241- if (hasPlus (exprs )) {
242- result = Polynomial .ZERO ;
243- int sign = 1 ;
244- for (Expr exp : exprs .getExprs ()) {
245- if (isMinus (exp )) {
246- sign = -1 ;
247- continue ;
248- }
249- if (isPlus (exp )) {
250- sign = 1 ;
251- continue ;
252- }
253- Polynomial p = eval (exp );
254- result = result .add (p .multiply (sign ));
255- }
256- } else {
257- result = Polynomial .ONE ;
258- for (Expr exp : exprs .getExprs ()) {
259- if (isOperator (exp )) {
260- continue ;
261- }
262- Polynomial p = eval (exp );
263- result = result .multiply (p );
264- }
265- }
266- yield result ;
267- }
268- case ListExpr listExpr -> {
269- if (listExpr .value .size () == 1 ) {
270- yield eval (listExpr .value ().getFirst ());
271- }
272- Expr exprs = Macro .applyStarMacro (listExpr .value );
273- if (exprs .size () == 1 ) {
274- yield eval (exprs .getFirst ());
275- }
276- Polynomial result ;
277- if (hasPlus (exprs )) {
278- result = Polynomial .ZERO ;
279- int sign = 1 ;
280- for (Expr exp : exprs .getExprs ()) {
281- if (isMinus (exp )) {
282- sign = -1 ;
283- continue ;
284- }
285- if (isPlus (exp )) {
286- sign = 1 ;
287- continue ;
288- }
289- Polynomial p = eval (exp );
290- result = result .add (p .multiply (sign ));
291- }
292- } else {
293- result = Polynomial .ONE ;
294- for (Expr exp : exprs .getExprs ()) {
295- if (isOperator (exp )) {
296- continue ;
297- }
298- Polynomial p = eval (exp );
299- result = result .multiply (p );
228+ result = Polynomial .ONE ;
229+ for (Expr exp : exprs .getExprs ()) {
230+ if (isOperator (exp )) {
231+ continue ;
300232 }
233+ Polynomial p = eval (exp );
234+ result = result .multiply (p );
301235 }
302236 yield result ;
303237 }
0 commit comments