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); }
public void ReleaseVariables() { boundVariables.Release(); boundVariables = null; // to prevent ReleaseVariables from being called twice. }
public ValueUnifier(IValue rhsValue, BoundVariableSet boundVariables) { this.boundVariables = boundVariables; this.rhsValue = rhsValue; }
public LhsConcreteValueUnifier(IConcreteValue lhsConcreteValue, BoundVariableSet boundVariables) { this.lhsConcreteValue = lhsConcreteValue; this.boundVariables = boundVariables; }