Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
        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;
            }
        }
Esempio n. 4
0
        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;
        }
Esempio n. 5
0
        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.");
            }
        }
Esempio n. 6
0
        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.");
            }
        }
Esempio n. 7
0
 public void ReleaseVariables()
 {
     boundVariables.Release ();
     boundVariables = null; // to prevent ReleaseVariables from being called twice.
 }
Esempio n. 8
0
 public Unifier(IConcreteValue lhs, BoundVariableSet boundVariables)
 {
     this.lhs            = lhs;
     this.boundVariables = boundVariables;
 }
Esempio n. 9
0
 public ListUnifier(List rhsList, BoundVariableSet boundVariables)
 {
     this.rhsList        = rhsList;
     this.boundVariables = boundVariables;
 }