private IEnumerable <BoundVariableSet> GetOutput(IValue [] arguments) { var variableSet = new BoundVariableSet(); if (variableSet.Unify(arguments [0], new Runtime.List(Tokenize(textReader).Select(t => new Runtime.Atom(t)).ToArray()))) { yield return(variableSet); } }
private IEnumerable <BoundVariableSet> GetOutput (IValue [] arguments) { var variableSet = new BoundVariableSet (); if (variableSet.Unify (arguments [0], new Runtime.List (Tokenize (textReader).Select (t => new Runtime.Atom(t)).ToArray ()))) { yield return variableSet; } }
public Frame (Goal [] goals, Goal parent, BoundVariableSet boundVariables, Dictionary <string, Variable> variables) { this.goals = goals; this.boundVariables = boundVariables; this.HeadGoal = parent; this.variables = new Variables(variables); foreach (var goal in goals) { goal.Frame = this; } }
Frame Unify (Compiled.Clause clause) { var boundVariables = new BoundVariableSet (); var argumentInstantiator = new ArgumentInstantiator (); var clauseHeadArguments = clause.Head.Arguments.Select (a => a.Accept(argumentInstantiator)).ToArray(); if (boundVariables.ZipUnify (Arguments, clauseHeadArguments)) { Goal [] goals = EngineInternals.InstantiateGoals (clause.Body, argumentInstantiator); return new Frame (goals, this, boundVariables, argumentInstantiator.Variables); } return null; }
private static IEnumerable <BoundVariableSet> BindVariables(IValue [] arguments) { var list1 = GetList(arguments [0]); var list2 = GetList(arguments [1]); var list3 = GetList(arguments [2]); if (list1 != null && list3 != null) { string s1 = ((IValue)list1).Accept(new ArgumentPrinter()); string s3 = ((IValue)list3).Accept(new ArgumentPrinter()); string s = s1 + s3; var variables = new BoundVariableSet(); if (list3.IsAtLeastAsLongAs(list1) && variables.ZipUnify(list1, list3)) { var restOfList3 = list3.SkipLengthOf(list1); if (list2 == null) { var arg2 = (Runtime.Variable)arguments [1]; variables.Bind(arg2, restOfList3); yield return(variables); } else { if (variables.Unify(list2, restOfList3)) { yield return(variables); } } } } else { throw new Exception("IO pattern not supported."); } }
private static IEnumerable <BoundVariableSet> BindVariables (IValue [] arguments) { var list1 = GetList (arguments [0]); var list2 = GetList (arguments [1]); var list3 = GetList (arguments [2]); if (list1 != null && list3 != null) { string s1 = ((IValue) list1).Accept (new ArgumentPrinter ()); string s3 = ((IValue) list3).Accept (new ArgumentPrinter ()); string s = s1 + s3; var variables = new BoundVariableSet (); if (list3.IsAtLeastAsLongAs (list1) && variables.ZipUnify (list1, list3)) { var restOfList3 = list3.SkipLengthOf (list1); if (list2 == null) { var arg2 = (Runtime.Variable) arguments [1]; variables.Bind (arg2, restOfList3); yield return variables; } else { if (variables.Unify (list2, restOfList3)) { yield return variables; } } } } else { throw new Exception ("IO pattern not supported."); } }
public void ReleaseVariables() { boundVariables.Release (); boundVariables = null; // to prevent ReleaseVariables from being called twice. }
public Unifier(IConcreteValue lhs, BoundVariableSet boundVariables) { this.lhs = lhs; this.boundVariables = boundVariables; }
public ListUnifier(List rhsList, BoundVariableSet boundVariables) { this.rhsList = rhsList; this.boundVariables = boundVariables; }