示例#1
0
        // 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);
        }
示例#2
0
        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;
        }