예제 #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);
        }
예제 #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);
        }
예제 #3
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));
        }