我有一个类似a*(b+c)
的表达式,并且我已经成功解析为AST,所以它最终变为:
我正在尝试扩展它最终变成的表达a*b + a*c
,但没有运气。
我想知道一种扩展表达式的算法,或者也许是一个库来做到这一点,最好是.NET。
最佳答案
在Symja中,可以使用Distribute()或Expand()函数来解决问题:
package org.matheclipse.core.examples;
import org.matheclipse.core.eval.ExprEvaluator;
import org.matheclipse.core.expression.F;
import org.matheclipse.core.interfaces.IExpr;
import org.matheclipse.parser.client.SyntaxError;
import org.matheclipse.parser.client.math.MathException;
public class ExpandSO54204637 {
public static void main(String[] args) {
try {
ExprEvaluator util = new ExprEvaluator();
IExpr expr = util.eval("a*(b+c)");
IExpr result = util.eval(F.Distribute(expr));
// print: a*b+a*c
System.out.println(result.toString());
result = util.eval(F.Expand(expr));
// print: a*b+a*c
System.out.println(result.toString());
} catch (SyntaxError e) {
// catch Symja parser errors here
System.out.println(e.getMessage());
} catch (MathException me) {
// catch Symja math errors here
System.out.println(me.getMessage());
} catch (Exception e) {
e.printStackTrace();
} catch (final StackOverflowError soe) {
System.out.println(soe.getMessage());
} catch (final OutOfMemoryError oome) {
System.out.println(oome.getMessage());
}
}
}