static void Main(string[] args) { try { Console.Write("Enter first term: "); var lhs = GetTerm(); Console.Write("Enter second term: "); var rhs = GetTerm(); MguCalculation getMgu = new MguCalculation(); var unifiers = getMgu.GetUnifier(lhs, rhs); if (unifiers.Count == 0) Console.WriteLine("Not Unifiable"); else { Console.WriteLine(string.Format("Found {0} unifiers",unifiers.Count)); int i = 0; foreach (var unifier in unifiers) { i++; Console.WriteLine(); Console.WriteLine("Unifier " + i + ":"); if (unifier.Unifier.Count == 0) Console.WriteLine("Unification succeeded with equal input terms given."); else { foreach (var sub in unifier.Unifier.OrderBy(s => s.Variable.Name)) Console.WriteLine(sub.ToSourceCode()); } } } } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } Console.WriteLine(); Console.WriteLine("Press any key to exit"); Console.ReadKey(); }
/// <summary> /// Creates a new interpreter /// </summary> public Interpreter(TrsProgramBlock programBlock, List <ITrsNativeFunction> nativeFunctions = null, List <ITrsUnifierCalculation> customUnifiersCalculations = null) { if (nativeFunctions == null) { nativeFunctions = new List <ITrsNativeFunction>(); } else { this.nativeFunctions = nativeFunctions; } mguCalculation = new MguCalculation(customUnifiersCalculations); this.initialProgram = programBlock; var validator = new TrsProgramBlockValidator(); validator.Validate(this.initialProgram); ValidationMessages = new List <InterpreterResultMessage>(); ValidationMessages.AddRange(validator.ValidationMessages); this.hasErrors = ValidationMessages.Where(msg => msg.MessageType == InterpreterMessageType.Error).Count() > 0; if (!hasErrors) { ClassifyInput(); } }
/// <summary> /// Creates a new interpreter /// </summary> public Interpreter(TrsProgramBlock programBlock, List<ITrsNativeFunction> nativeFunctions = null, List<ITrsUnifierCalculation> customUnifiersCalculations = null) { if (nativeFunctions == null) nativeFunctions = new List<ITrsNativeFunction>(); else this.nativeFunctions = nativeFunctions; mguCalculation = new MguCalculation(customUnifiersCalculations); this.initialProgram = programBlock; var validator = new TrsProgramBlockValidator(); validator.Validate(this.initialProgram); ValidationMessages = new List<InterpreterResultMessage>(); ValidationMessages.AddRange(validator.ValidationMessages); this.hasErrors = ValidationMessages.Where(msg => msg.MessageType == InterpreterMessageType.Error).Count() > 0; if (!hasErrors) ClassifyInput(); }