// faillet: Look for ways to get to these inputs, to get that result type public bool RecurseConversionAttempt(IArena arena, double salience, string reason, IContinuation skip, params object[] args) { // params: object value, IEnumerable<IAction> actions, IContinuation succ if (aborter.IsAborted) { return(true); // abort! } // Can we go down another level? Aborter next = new Aborter(aborter); if (next.IsAborted) { return(true); } object value = args[0]; IEnumerable <IAction> actions = (IEnumerable <IAction>)args[1]; IContinuation succ = (IContinuation)args[2]; foreach (IAction action in actions) { arena.Call(new ActionConversion(plugenv, action.Input, searched, next), salience * .9, value, new CallableAsContinuation(action, succ), new NopCallable()); } return(true); }
public bool CheckAction(IArena arena, double salience, object value, IFailure fail, params object[] args) { // params: object oldval, IContinuation succ if (aborter.IsAborted) { return(true); // abort! } ArgumentTree argtree = new ArgumentTree(args[0]); IContinuation succ = (IContinuation)args[1]; IAction action = (IAction)value; ArgumentTree result = action.Input.IsValid(argtree); if (result == null) { // abort the search-- we found an appropriate action! aborter.Abort(); return(arena.Call(action, salience, args[0], succ, fail)); } else { return(arena.Fail(fail, salience, "input type doesn't match", succ)); } }
public int CheckAction(IArena arena, double salience, object value, IFailure fail, params object[] args) { // params: object oldval, IContinuation succ if (aborter.IsAborted) return 1; // abort! ArgumentTree argtree = new ArgumentTree(args[0]); IContinuation succ = (IContinuation)args[1]; IAction action = (IAction)value; ArgumentTree result = action.Input.IsValid(argtree); if (result == null) { // abort the search-- we found an appropriate action! aborter.Abort(); return arena.Call(action, salience, args[0], succ, fail); } else return arena.Fail(fail, salience, "input type doesn't match", succ); }
// faillet: Look for ways to get to these inputs, to get that result type public int RecurseConversionAttempt(IArena arena, double salience, string reason, IContinuation skip, params object[] args) { // params: object value, IEnumerable<IAction> actions, IContinuation succ if (aborter.IsAborted) return 1; // abort! // Can we go down another level? Aborter next = new Aborter(aborter); if (next.IsAborted) return 1; object value = args[0]; IEnumerable<IAction> actions = (IEnumerable<IAction>)args[1]; IContinuation succ = (IContinuation)args[2]; int used = 1; foreach (IAction action in actions) used += arena.Call(new ActionConversion(plugenv, action.Input, searched, next), salience * .9, value, new CallableAsContinuation(action, succ), new NopCallable()); return used; }