internal class Term { internal string functor = null; internal ArrayList body = null; internal double number = Double.NaN; internal bool isInteger = false; internal Term (double n) { number = n; } internal Term (int n) { number = n; isInteger = true; } internal Term (string functor) { this.functor = functor; } internal Term (string functor, ArrayList body) { this.functor = functor; this.body = body; } internal bool IsNumber { get { return !Double.IsNaN(number); } } internal bool HasBody { get { return (body != null && body.Count != 0); } } public override string ToString () { if (IsNumber) return (isInteger ? ((int)number).ToString() : number.ToString()); if (!HasBody) return functor; StringBuilder s = new StringBuilder(functor); s.Append("("); for (int i=0; i