diff --git a/exact-numbers/src/main/kotlin/xyz/lbres/exactnumbers/expressions/expression/MultiplicativeExpression.kt b/exact-numbers/src/main/kotlin/xyz/lbres/exactnumbers/expressions/expression/MultiplicativeExpression.kt index 95bde40..8b2128b 100644 --- a/exact-numbers/src/main/kotlin/xyz/lbres/exactnumbers/expressions/expression/MultiplicativeExpression.kt +++ b/exact-numbers/src/main/kotlin/xyz/lbres/exactnumbers/expressions/expression/MultiplicativeExpression.kt @@ -21,6 +21,7 @@ import java.math.BigDecimal @Suppress("EqualsOrHashCode") internal class MultiplicativeExpression private constructor(expressions: ConstMultiSet) : ExpressionImpl() { private val expressions: ConstMultiSet + private var simplified: Expression? = null init { this.expressions = when { @@ -65,11 +66,16 @@ internal class MultiplicativeExpression private constructor(expressions: ConstMu } override fun getSimplified(): Expression { + if (simplified != null) { + return simplified!! + } + val split = getSplitExpressions() val simpleTerm = split.first.fold(Term.ONE) { acc, expr -> acc * expr.term } val simple: Expression = SimpleExpression(simpleTerm.getSimplified()) if (split.second.isEmpty()) { + simplified = simple return simple } @@ -82,7 +88,8 @@ internal class MultiplicativeExpression private constructor(expressions: ConstMu } distributed } - return AdditiveExpression(exprs.toConstMultiSet()).getSimplified() + simplified = AdditiveExpression(exprs.toConstMultiSet()).getSimplified() + return simplified!! } override fun getValue(): BigDecimal = getSimplified().getValue()