Esempio n. 1
0
        public void ManualUnification()
        {
            var simpleUnifier = new SimpleUnifier();
            var unifier       = new TraceUnifier(simpleUnifier);
            var X             = new[] { new Variable(), new Variable(), new Variable(), new Variable(), new Variable(), new Variable(), new Variable(), new Variable() };
            var h2            = new UnboundFunctor(2);
            var f1            = new UnboundFunctor(1);
            var p3            = new UnboundFunctor(3);
            var a0            = new UnboundFunctor(0);

            unifier.BindVariable(0, X[1]);
            unifier.BindVariable(1, X[2]);
            unifier.BindVariable(2, X[3]);
            unifier.BindVariable(3, X[4]);
            unifier.BindVariable(4, X[5]);
            unifier.BindVariable(5, X[6]);
            unifier.BindVariable(6, X[7]);

            unifier.PutStructure(h2, 2, X[3]);
            unifier.SetVariable(X[2]);
            unifier.SetVariable(X[5]);
            unifier.PutStructure(f1, 1, X[4]);
            unifier.SetValue(X[5]);
            unifier.PutStructure(p3, 3, X[1]);
            unifier.SetValue(X[2]);
            unifier.SetValue(X[3]);
            unifier.SetValue(X[4]);

            unifier.GetStructure(p3, 3, X[1]);
            unifier.UnifyVariable(X[2]);
            unifier.UnifyVariable(X[3]);
            unifier.UnifyVariable(X[4]);
            unifier.GetStructure(f1, 1, X[2]);
            unifier.UnifyVariable(X[5]);
            unifier.GetStructure(h2, 2, X[3]);
            unifier.UnifyValue(X[4]);
            unifier.UnifyVariable(X[6]);
            unifier.GetStructure(f1, 1, X[6]);
            unifier.UnifyVariable(X[7]);
            unifier.GetStructure(a0, 0, X[7]);

            var result = simpleUnifier.UnifiedValue(X[1]);

            Assert.IsNotNull(result);
        }
Esempio n. 2
0
 /// <summary>
 /// Applies parameters to a functor
 /// </summary>
 public static BoundFunctor With(this UnboundFunctor target, params ILiteral[] parameters)
 {
     return(new BoundFunctor(target, parameters));
 }
Esempio n. 3
0
        public void ManualUnification()
        {
            var simpleUnifier = new SimpleUnifier();
            var unifier = new TraceUnifier(simpleUnifier);
            var X = new[] { new Variable(), new Variable(), new Variable(), new Variable(), new Variable(), new Variable(), new Variable(), new Variable() };
            var h2 = new UnboundFunctor(2);
            var f1 = new UnboundFunctor(1);
            var p3 = new UnboundFunctor(3);
            var a0 = new UnboundFunctor(0);

            unifier.BindVariable(0, X[1]);
            unifier.BindVariable(1, X[2]);
            unifier.BindVariable(2, X[3]);
            unifier.BindVariable(3, X[4]);
            unifier.BindVariable(4, X[5]);
            unifier.BindVariable(5, X[6]);
            unifier.BindVariable(6, X[7]);

            unifier.PutStructure(h2, 2, X[3]);
            unifier.SetVariable(X[2]);
            unifier.SetVariable(X[5]);
            unifier.PutStructure(f1, 1, X[4]);
            unifier.SetValue(X[5]);
            unifier.PutStructure(p3, 3, X[1]);
            unifier.SetValue(X[2]);
            unifier.SetValue(X[3]);
            unifier.SetValue(X[4]);

            unifier.GetStructure(p3, 3, X[1]);
            unifier.UnifyVariable(X[2]);
            unifier.UnifyVariable(X[3]);
            unifier.UnifyVariable(X[4]);
            unifier.GetStructure(f1, 1, X[2]);
            unifier.UnifyVariable(X[5]);
            unifier.GetStructure(h2, 2, X[3]);
            unifier.UnifyValue(X[4]);
            unifier.UnifyVariable(X[6]);
            unifier.GetStructure(f1, 1, X[6]);
            unifier.UnifyVariable(X[7]);
            unifier.GetStructure(a0, 0, X[7]);

            var result = simpleUnifier.UnifiedValue(X[1]);
            Assert.IsNotNull(result);
        }