public override ITerm CApply(Unifier u) { try { double l = ((INumberTerm)GetTerm(0).CApply(u)).Solve(); if (IsUnary()) { if (op == ArithmeticOp.minus) { value = new NumberTermImpl(-l); } else { value = new NumberTermImpl(l); } } else { double r = ((INumberTerm)GetTerm(1).CApply(u)).Solve(); value = new NumberTermImpl(op.Eval(l, r)); } return(value); } catch (InvalidCastException) { Debug.Log("The value of " + this + " is not a number! Unifier = " + u + ". Code: " + GetSrcInfo()); return(new NumberTermImpl(double.NaN)); } catch (NoValueException) { return(Clone()); } }
public override int CompareTo(ITerm o) { if (o.GetType() == typeof(VarTerm)) { return(o.CompareTo(this) * -1); } if (o.GetType() == typeof(NumberTermImpl)) { NumberTermImpl st = o as NumberTermImpl; if (value > st.value) { return(1); } if (value < st.value) { return(-1); } return(0); } return(-1); }
public NumberTermImpl(NumberTermImpl t) { value = t.value; srcInfo = t.srcInfo; }