Пример #1
0
        public void TestConjunctionDifferent()
        {
            var v1 = new LogicVar();
            var v2 = new LogicVar();

            var goal1 = MicroKanren.Equal(v1, 5);
            var goal2 = MicroKanren.Equal(v2, "6");
            var goal3 = MicroKanren.Equal(v2, v1);

            var conjGoal = MicroKanren.Conjunction(goal3, MicroKanren.Conjunction(goal1, goal2));

            var subst = conjGoal(MicroKanren.GetEmptySubst());

            Assert.IsNull(subst);
        }
Пример #2
0
        public void TestRecursiveConjunction()
        {
            var v1 = new LogicVar();
            var v2 = new LogicVar();
            var v3 = new LogicVar();

            var goal1 = MicroKanren.Equal(v1, 5);
            var goal2 = MicroKanren.Equal(v2, v1);
            var goal3 = MicroKanren.Equal(v3, v2);

            var conjGoal = MicroKanren.Conjunction(goal3, MicroKanren.Conjunction(goal1, goal2));

            var subst = conjGoal(MicroKanren.GetEmptySubst()).SingleOrDefault();

            Assert.NotNull(subst);

            Assert.AreEqual(5, subst.GetValue(v1));
            Assert.AreEqual(5, subst.GetValue(v2));
            Assert.AreEqual(5, subst.GetValue(v3));
        }
Пример #3
0
        public void TestDisjunction()
        {
            var v1 = new LogicVar();
            var v2 = new LogicVar();

            var goal0 = MicroKanren.Equal(v1, v2);
            var goal1 = MicroKanren.Equal(v1, 5);
            var goal2 = MicroKanren.Equal(v2, 6);

            var conjGoal = MicroKanren.Conjunction(goal0, MicroKanren.Disjunction(goal1, goal2));

            var subst = conjGoal(MicroKanren.GetEmptySubst());

            Assert.NotNull(subst);

            var substList = subst.ToList();

            Assert.AreEqual(5, substList[0].GetValue(v1));
            Assert.AreEqual(5, substList[0].GetValue(v2));
            Assert.AreEqual(6, substList[1].GetValue(v1));
            Assert.AreEqual(6, substList[1].GetValue(v2));
        }