public Execute ( AbstractMachineState state ) : void | ||
state | AbstractMachineState | |
리턴 | void |
public override void Execute(AbstractMachineState state)
{
AMProgram program = (AMProgram)state.Program;
string procedureName = _label + "/" + _arity.ToString();
if (program.IsDefined(procedureName))
{
program.CP = program.P.Next;
program.NumberOfArguments = _arity;
program.P = program[procedureName];
// TODO: B0 should be set to B
}
else
{
state.Backtrack();
}
}
public void Call() { AbstractMachineState state = new AbstractMachineState(new AMFactory()); ArrayList prog = new ArrayList(); prog.Add(new PutConstantInstruction()); prog.Add(new HaltInstruction()); state.Initialize(prog); AMProgram program = (AMProgram)state.Program; ProgramClause clause = new ProgramClause("male", 2); program.AddLabel("male/2", clause); CallInstruction i = new CallInstruction(); object[] args = { "male", "2" }; i.Process(args); i.Execute(state); Assert.AreEqual("call", i.Name()); Assert.AreEqual(2, i.NumberOfArguments()); Assert.AreSame(clause, program.P); Assert.AreEqual("halt", program.CP.Instruction.Name()); }