Example #1
0
        public void ExternalPredicateReturningMulpipleAnswersTest()
        {
            var externalPredicate = new ExternalPredicateDeclaration("externalPredicate", 1);

            Compiled.Program program = Compiler.Compile(new AST.Program(new AST.Clause []
            {
            }, new []
            {
                externalPredicate
            }));

            program.SetExternalPredicateCallbacks(
                new []
            {
                new KeyValuePair <ExternalPredicateDeclaration, ExternalPredicateDefinition> (externalPredicate, new SampleExternalPredicate("john", "jane").BindVariables)
            }
                );

            var goal = Helper.MakeGoal("externalPredicate", "X");

            var solutions = Helper.GetSolutions(goal, program).ToArray();

            Assert.AreEqual(2, solutions.Length);

            Assert.AreEqual("john", ((Runtime.Atom)solutions [0] ["X"]).Name);
            Assert.AreEqual("jane", ((Runtime.Atom)solutions [1] ["X"]).Name);
        }
Example #2
0
        public void PrologPredicateCallingExternalPredicateTest()
        {
            var externalPredicate = new ExternalPredicateDeclaration("externalPredicate", 1);

            Compiled.Program program = Compiler.Compile(new AST.Program(new []
            {
                new AST.Clause
                {
                    Head = Helper.MakeGoal("callExternalPredicate", "X"),
                    Body = new [] { Helper.MakeGoal("externalPredicate", "X") }
                }
            }, new []
            {
                externalPredicate
            }));

            program.SetExternalPredicateCallbacks(
                new []
            {
                new KeyValuePair <ExternalPredicateDeclaration, ExternalPredicateDefinition> (externalPredicate, new SampleExternalPredicate("john").BindVariables)
            }
                );

            var goal = Helper.MakeGoal("callExternalPredicate", "X");

            AssertExternalPredicateSolutionIsCorrect(goal, program);
        }
Example #3
0
        public void DoesBillLikeIcecream()
        {
            // likes (_, icecream).
            Compiled.Program program = EveryOneLikesIcecream();

            // ?- likes (bill, icecream).
            var goal = new AST.Goal
            {
                PredicateName = "likes",

                Arguments = new IArgument[]
                {
                    new Atom {
                        Name = "bill"
                    },
                    new Atom {
                        Name = "icecream"
                    }
                }
            };

            var solutions = Helper.Solve(goal, program);

            var solution = solutions.Single();        // a single solution means prolog says 'yes'

            Assert.IsFalse(solution.Variables.Any()); // no variables in query
        }
Example #4
0
        public void WhatDoesBillLike()
        {
            // likes (_, icecream).
            Compiled.Program program = EveryOneLikesIcecream();

            // ?- likes (bill, X).
            var goal = new AST.Goal
            {
                PredicateName = "likes",

                Arguments = new IArgument[]
                {
                    new Atom {
                        Name = "bill"
                    },
                    new Variable {
                        Name = "X"
                    }
                }
            };

            var solutions = Helper.GetSolutions(goal, program);

            var variables = solutions.Single();

            var variable = variables.Single();

            Assert.AreEqual("X", variable.Key);
            Assert.AreEqual("icecream", ((Runtime.Atom)variable.Value).Name);
        }
Example #5
0
        private static void AssertExternalPredicateSolutionIsCorrect(AST.Goal goal, Compiled.Program program)
        {
            var solutions = Helper.GetSolutions(goal, program);

            var variables = solutions.Single();

            Assert.AreEqual("john", ((Runtime.Atom)variables ["X"]).Name);
        }
Example #6
0
        public void UnifyListElementsFails()
        {
            Compiled.Program program = GetStarsDatabase();

            var goal = Helper.MakeGoal("stars", "[X,Y,Z]");

            var solutions = Helper.Solve(goal, program);

            Assert.IsFalse(solutions.Any());
        }
Example #7
0
        public static IEnumerable <Runtime.ISolutionTreeNode> Solve(Compiled.Program program, out Tracer tracer, params AST.Goal [] goals)
        {
            var engine = new Runtime.Engine();

            tracer = new Tracer();
            //engine.NewGoal += tracer.Engine_NewGoal;
            //engine.Unified += tracer.Engine_Unified;
            //engine.Failed  += tracer.Engine_Failed;

            return(Compiler.Solve(engine, goals, program));
        }
Example #8
0
        public void UnifyListElements()
        {
            Compiled.Program program = GetStarsDatabase();

            var goal = Helper.MakeGoal("stars", "[X,Y]");

            var solutions = Helper.GetSolutions(goal, program);

            var variables = solutions.Single();

            Assert.AreEqual("sun", ((Runtime.Atom)variables ["X"]).Name);
            Assert.AreEqual("sirius", ((Runtime.Atom)variables ["Y"]).Name);
        }
Example #9
0
        public void UnifyList()
        {
            Compiled.Program program = GetStarsDatabase();

            var goal = Helper.MakeGoal("stars", "Xs");

            var solutions = Helper.GetSolutions(goal, program);

            var list = (Runtime.List)solutions.Single().Single().Value;

            Assert.AreEqual("sun", ((Runtime.Atom)list.First()).Name);
            Assert.AreEqual("sirius", ((Runtime.Atom)list.Skip(1).First()).Name);
        }
Example #10
0
        static void Main(string [] args)
        {
            Compiled.Program program = GetProgram(args[0]);

            var externalPredicates = new [] { Concat.GetConcat(), Lexer.GetLexer(new StringReader("ордена ленина полк")) };

            program.SetExternalPredicateCallbacks(externalPredicates);

            var engine = new EngineInternals();

            var events = engine.Run(program);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1(events));
        }
Example #11
0
 public static IEnumerable <Runtime.ISolutionTreeNode> Solve(AST.Goal goal, Compiled.Program program)
 {
     return(Compiler.Solve(new Runtime.Engine(), new [] { goal }, program));
 }
Example #12
0
        public static IEnumerable <Dictionary <string, Runtime.IConcreteValue> > GetSolutions(AST.Goal goal, Compiled.Program program)
        {
            var solutions = Solve(goal, program);

            return(solutions.Select(GetTopLevelVariables));
        }
Example #13
0
 public IEnumerable <ISolutionTreeNode> Run(Compiled.Program program)
 {
     return(Solve(program.GetStartupGoal()));
 }
Example #14
0
 public IEnumerable <IDebugEvent> Run(Compiled.Program program)
 {
     return(Solve(program.GetStartupGoal()));
 }