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

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

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

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

            if (Ai.IsReference)
            {
                heap.Push(new StructureTerm(_structureName, _arity));
                Ai.Bind((AbstractTerm)heap.Top());
                state.IsWriteMode = true;
            }
            else if (Ai.IsStructure)
            {
                if (Ai.Name == _structureName)
                {
                    // set S to next item on heap
                    state.S = Ai.Next;

                    // set read mode
                    state.IsReadMode = true;
                }
                else
                {
                    state.Fail = true;
                }
            }
            else
            {
                state.Fail = true;
            }

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

Usage Example

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

            GetStructureInstruction i = new GetStructureInstruction();

            object[] args = { "s/2", "X0" };

            i.Process(args);

            i.Execute(state);

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

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

            Assert.AreEqual("s", X0.Name);
            Assert.AreEqual(2, X0.Arity);
        }