public Execute ( AbstractMachineState state ) : void | ||
state | AbstractMachineState | |
Résultat | void |
public override void Execute(AbstractMachineState state)
{
AMProgram program = (AMProgram)state.Program;
AMHeap heap = (AMHeap)state.DataArea;
AbstractTerm Vn = (AbstractTerm)state[_vn];
if (state.IsReadMode)
{
state.Fail = !Vn.Unify((AbstractTerm)state.S);
}
else
{
AbstractTerm addr = Vn.Dereference();
if (IsEnvironmentVariable(addr, state))
{
// Push a new variable on the heap
AbstractTerm newVariable = new AbstractTerm();
heap.Push(newVariable);
addr.Bind((AbstractTerm)heap.Top());
}
else
{
AbstractTerm newHeapItem = new AbstractTerm();
newHeapItem.Assign(addr);
heap.Push(newHeapItem);
}
}
if (state.S != null)
{
state.S = state.S.Next;
}
if (state.Fail)
{
state.Backtrack();
}
else
{
program.Next();
}
}
public void UnifyLocalValue() { AbstractMachineState state = SetupMachine(); UnifyLocalValueInstruction i = new UnifyLocalValueInstruction(); ConstantTerm con = new ConstantTerm("ali"); state.S = con; object[] args = { "X0" }; i.Process(args); i.Execute(state); Assert.AreEqual("unify_local_value", i.Name()); Assert.AreEqual(1, i.NumberOfArguments()); AbstractTerm X0 = (AbstractTerm)state["X0"]; Assert.AreEqual("ali", X0.Dereference().Data()); }