public void t_callback_with_subQuery()
        {
            Delegate d = new DelegateParameter1(assert_fact);

            PlEngine.RegisterForeign(d);

            Assert.IsTrue(PlQuery.PlCall("assert( (test(Result) :- member(X,[1,2,3]), assert_fact(X), findall(E, fact(E), Result)) )"));

            int count = 1;
            var q     = new PlQuery("test(L)");

            foreach (PlTermV s in q.Solutions)
            {
                switch (count)
                {
                case 1: Assert.AreEqual("[1]", s[0].ToString()); break;

                case 2: Assert.AreEqual("[1,2]", s[0].ToString()); break;

                case 3: Assert.AreEqual("[1,2,3]", s[0].ToString()); break;
                }
                //Console.WriteLine(s[0].ToString());
                count++;
            }
        }
        public void t_succeed_and_fail()
        {
            Delegate d = new DelegateParameter1(odd);

            PlEngine.RegisterForeign(d);
            Assert.IsFalse(PlQuery.PlCall("odd(as)"));
            Assert.IsFalse(PlQuery.PlCall("odd(4)"));
            Assert.IsTrue(PlQuery.PlCall("odd(5)"));
        }
        public void t_creating_a_list()
        {
            Delegate d = new DelegateParameter1(create_list);

            PlEngine.RegisterForeign(d);
            for (int i = 1; i < 10; i++)
            {
                PlTerm t = PlQuery.PlCallQuery("create_list(L)");
                Assert.AreEqual("[a,b,c]", t.ToString(), "create_list failed!");
            }
        }