Axiom.Runtime.Instructions.GetConstantInstruction.Execute C# (CSharp) Метод

Execute() публичный Метод

public Execute ( AbstractMachineState state ) : void
state AbstractMachineState
Результат void
        public override void Execute(AbstractMachineState state)
        {
            AMProgram program = (AMProgram)state.Program;

            AbstractTerm Ai = ((AbstractTerm)state[_ai]).Dereference();

            if (Ai.IsReference)
            {
                Ai.Assign(new ConstantTerm(_constant));
                AMTrail trail = (AMTrail)state.Trail;
                trail.Trail(Ai);
            }
            else if (Ai.IsConstant)
            {
                state.Fail = ((string)Ai.Data() != _constant);
            }
            else
            {
                state.Fail = true;
            }

            if (state.Fail)
            {
                state.Backtrack();
            }
            else
            {
                program.Next();
            }
        }

Usage Example

        public void GetConstant()
        {
            AbstractMachineState state = SetupMachine();

            GetConstantInstruction i = new GetConstantInstruction();

            object[] args = { "ali", "X0" };

            i.Process(args);

            i.Execute(state);

            Assert.AreEqual("get_constant", i.Name());
            Assert.AreEqual(2, i.NumberOfArguments());

            AbstractTerm X0 = ((AbstractTerm)state["X0"]).Dereference();

            Assert.IsTrue(X0.IsConstant);
            Assert.AreEqual("ali", X0.Data());
        }