private static void Apply(Slot[] me, Slot[] opponent, Value left, Value right, int resultSlot) { RessurectZombies(me, opponent); try { if (me[resultSlot].vitality <= 0) throw new GameError("result slot is dead:" + resultSlot); if (left.ArgsNeeded <= 0) throw new GameError("incorrect application: " + left + " " + right); var applicationsDone = 0; var res = new Application(left, right).Reduce(me, opponent, ref applicationsDone, false); me[resultSlot].value = res; } catch (GameError e) { Log(e.Message); me[resultSlot].value = Funcs.I; } }
public override Value DoReduce(Slot[] me, Slot[] opponent, Value[] args, ref int applicationsDone, bool zombieMode) { var f = args[0]; var g = args[1]; var x = args[2]; var left = new Application(f, x).Reduce(me, opponent, ref applicationsDone, zombieMode); var right = new Application(g, x).Reduce(me, opponent, ref applicationsDone, zombieMode); var res = new Application(left, right).Reduce(me, opponent, ref applicationsDone, zombieMode); return res; }