public override bool Equals(object obj) { PrologObject objMe; objMe = Normalize(); if (!(objMe == this)) { return(objMe.Equals(obj)); } if (obj is StructureObject) { obj = ((StructureObject)(obj)).Normalize(); } if (obj == null || !(obj.GetType().Equals(this.GetType()))) { return(false); } StructureObject st = ((StructureObject)(obj)); if (!(Functor.Equals(st.Functor))) { return(false); } if (!(Arity == st.Arity)) { return(false); } for (int k = 0; k <= Arity - 1; k++) { if (!(Parameters[k].Equals(st.Parameters[k]))) { return(false); } } return(true); }