示例#1
0
        public IEnumerator <TaskStatus> CreateProc(MentalTask bwxTask)
        {
            Task       _bwxTask    = null;
            Context    _bwxContext = null;
            Message    _bwxMsg;
            Clause     _bwxClause  = null;
            Atom       _bwxSubject = null;
            TaskResult _bwxResult  = null;

            Begin(bwxTask);
            _bwxContext         = new Context();
            Ent_RuleTestContext = new Entity("RuleTestContext", _bwxContext);
            _bwxContext.Add(new Clause(Ent_Belief, Ent_Bob, Ent_knows, Ent_Jack));
            _bwxContext.Add(new Clause(Ent_Belief, Ent_Bob, Ent_knows, Ent_John));
            _bwxContext.Add(new Clause(Ent_Belief, Ent_Bob, Ent_knows, Ent_Joe));
            _bwxContext.Add(new Clause(Ent_Belief, Ent_Joe, Ent_plays, Ent_Guitar));
            _bwxContext.Add(new Clause(Ent_Belief, Ent_Joe, Ent_likes, Ent_RockMusic));
            _bwxContext.Add(new Clause(Ent_Belief, Ent_Jack, Ent_plays, Ent_Piano));
            _bwxContext.Add(new Clause(Ent_Belief, Ent_Jack, Ent_likes, Ent_ClassicalMusic));
            _bwxContext.Add(new Clause(Ent_Belief, Ent_John, Ent_plays, Ent_Guitar));
            _bwxContext.Add(new Clause(Ent_Belief, Ent_John, Ent_likes, Ent_RockMusic));
            _bwxMsg = new Message(MessageKind.Attempt, null, null, new Clause(Ent_Perform, Ent_Self, Ent_ruleTest, null)
            {
                { Ent_context, Ent_RuleTestContext }
            });
            Post(bwxTask.Process, _bwxMsg);
            yield return(Succeed(bwxTask.Process, bwxTask.Message));
        }
示例#2
0
            public IEnumerator <TaskStatus> IncrementProposeProc(MentalTask bwxTask, Atom g, int v1)
            {
                Task       _bwxTask    = null;
                Context    _bwxContext = null;
                Message    _bwxMsg;
                Clause     _bwxClause  = null;
                Atom       _bwxSubject = null;
                TaskResult _bwxResult  = null;

                Begin(bwxTask);
                {
                    foreach (int v2 in bwxTask.Context.QuerySubjPred <int>(g, Ent_value))
                    {
                        if (v1 == v2)
                        {
                            {
                                yield return(Succeed(bwxTask.Process, bwxTask.Message));
                            }
                        }
                    }
                }
                _bwxMsg = new Message(MessageKind.Attempt, null, null, new Clause(Ent_Perform, Ent_Self, Ent_increment, g));
                Propose(bwxTask.Process, _bwxMsg, null);
                yield return(Return(bwxTask.Process, bwxTask.Message));

                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#3
0
            public IEnumerator <TaskStatus> PayDriverProc(MentalTask bwxTask, Element origin, Element destination)
            {
                Task       _bwxTask;
                Context    _bwxContext;
                Message    _bwxMsg;
                Clause     _bwxClause;
                Element    _bwxSubject;
                TaskResult _bwxResult;

                {
                    _bwxClause = bwxTask.Context.Find(new ClausePattern(origin, Ent_distanceTo, destination));
                    if (_bwxClause != null)
                    {
                        float distance = (float)_bwxClause[Ent_distance];
                        {
                            foreach (float cash in bwxTask.Context.QuerySubjPred <float>(Ent_Self, Ent_cash))
                            {
                                if (cash >= 1.5 + .5 * distance)
                                {
                                    _bwxMsg = new Message(MessageKind.Modify, bwxTask, null, new Clause(Ent_Belief, Ent_Self, Ent_cash, (float)(cash - (1.5 + .5 * distance))));
                                    Post(bwxTask.Process, _bwxMsg);
                                }
                            }
                        }
                    }
                }
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#4
0
            public IEnumerator <TaskStatus> ImpasseProc(MentalTask bwxTask)
            {
                Task       _bwxTask;
                Context    _bwxContext;
                Message    _bwxMsg;
                Clause     _bwxClause;
                Element    _bwxSubject;
                TaskResult _bwxResult;

                {
                    ControlFlags _bwxQflags = ControlFlags.None;
                    {
                        foreach (Element g in bwxTask.Context.QueryType(Ent_Goal))
                        {
                            if (bwxTask.Context.Exists(g, Ent_status, Ent_Active))
                            {
                                _bwxQflags |= ControlFlags.PartialSuccess;
                                _bwxMsg     = new Message(MessageKind.Attempt, bwxTask, null, (Clause)g);
                                Propose(bwxTask.Process, _bwxMsg, null);
                            }
                            else
                            {
                                _bwxQflags |= ControlFlags.PartialFailure;
                            }
                        }
                    }
                    if (_bwxQflags == ControlFlags.None || _bwxQflags == ControlFlags.PartialFailure)
                    {
                        bwxTask.Process.Halt();
                    }
                }
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#5
0
            public IEnumerator <TaskStatus> OntopElabProc(MentalTask bwxTask, Atom x, Atom y)
            {
                Task       _bwxTask    = null;
                Context    _bwxContext = null;
                Message    _bwxMsg;
                Clause     _bwxClause  = null;
                Atom       _bwxSubject = null;
                TaskResult _bwxResult  = null;

                Begin(bwxTask);
                {
                    if (y.TypeCheck(Ent_Block) && bwxTask.Context.Exists(y, Ent_isClear, true))
                    {
                        {
                            _bwxMsg = new Message(MessageKind.Remove, null, null, new Clause(Ent_Belief, y, Ent_isClear, true));
                            Post(bwxTask.Process, _bwxMsg);
                        }
                    }
                }
                {
                    if (bwxTask.Context.Exists(x, Ent_onTop, y))
                    {
                        {
                            _bwxMsg = new Message(MessageKind.Add, null, null, new Clause(Ent_Belief, y, Ent_beneath, x));
                            Post(bwxTask.Process, _bwxMsg);
                        }
                    }
                }
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#6
0
        public IEnumerator <TaskStatus> CreateProc(MentalTask bwxTask)
        {
            Task       _bwxTask    = null;
            Context    _bwxContext = null;
            Message    _bwxMsg;
            Clause     _bwxClause  = null;
            Atom       _bwxSubject = null;
            TaskResult _bwxResult  = null;

            Begin(bwxTask);
            _bwxContext     = new Context();
            Ent_BloxContext = new Entity("BloxContext", _bwxContext);
            _bwxContext.Add(new Clause(Ent_Belief, Ent_Table1, Ent_isClear, true));
            _bwxContext.Add(new Clause(Ent_Belief, Ent_Block1, Ent_onTop, Ent_Table1));
            _bwxContext.Add(new Clause(Ent_Belief, Ent_Block2, Ent_onTop, Ent_Block1));
            _bwxContext.Add(new Clause(Ent_Belief, Ent_Block3, Ent_onTop, Ent_Block2));
            _bwxContext.Add(new Clause(Ent_Belief, Ent_Block3, Ent_isClear, true));
            _bwxContext.Add(new Clause(Ent_Perform, Ent_Self, Ent_stack, Ent_Block1)
            {
                { Ent_on, Ent_Block2 }
            });
            _bwxContext.Add(new Clause(Ent_Perform, Ent_Self, Ent_stack, Ent_Block2)
            {
                { Ent_on, Ent_Block3 }
            });
            _bwxMsg = new Message(MessageKind.Attempt, null, null, new Clause(Ent_Perform, Ent_Self, Ent_blox, null)
            {
                { Ent_context, Ent_BloxContext }
            });
            Post(bwxTask.Process, _bwxMsg);
            yield return(Succeed(bwxTask.Process, bwxTask.Message));
        }
示例#7
0
            public IEnumerator <TaskStatus> ClearProc(MentalTask bwxTask, Atom x)
            {
                Task       _bwxTask    = null;
                Context    _bwxContext = null;
                Message    _bwxMsg;
                Clause     _bwxClause  = null;
                Atom       _bwxSubject = null;
                TaskResult _bwxResult  = null;

                Begin(bwxTask);
                {
                    foreach (Atom y in bwxTask.Context.QuerySubjPred <Atom>(x, Ent_beneath))
                    {
                        foreach (Atom z in bwxTask.Context.QueryPredObj(Ent_isClear, true))
                        {
                            if (z != x)
                            {
                                if (z != y)
                                {
                                    {
                                        _bwxMsg = new Message(MessageKind.Attempt, null, null, new Clause(Ent_Perform, Ent_Self, Ent_stack, y)
                                        {
                                            { Ent_on, z }
                                        });
                                        Propose(bwxTask.Process, _bwxMsg, null);
                                    }
                                }
                            }
                        }
                    }
                }
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#8
0
            public IEnumerator <TaskStatus> IncrementApplyProc(MentalTask bwxTask, Atom g)
            {
                Task       _bwxTask    = null;
                Context    _bwxContext = null;
                Message    _bwxMsg;
                Clause     _bwxClause  = null;
                Atom       _bwxSubject = null;
                TaskResult _bwxResult  = null;

                Begin(bwxTask);
                {
                    foreach (int v1 in bwxTask.Context.QuerySubjPred <int>(g, Ent_value))
                    {
                        {
                            _bwxMsg = new Message(MessageKind.Remove, null, null, new Clause(Ent_Belief, g, Ent_value, v1));
                            Post(bwxTask.Process, _bwxMsg);
                            var v2 = v1 + 1;
                            _bwxMsg = new Message(MessageKind.Add, null, null, new Clause(Ent_Belief, g, Ent_value, v2));
                            Post(bwxTask.Process, _bwxMsg);
                            Console.WriteLine("{0} ...", v2);
                        }
                    }
                }
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#9
0
        public IEnumerator <TaskStatus> CreateProc(MentalTask bwxTask)
        {
            Task       _bwxTask;
            Context    _bwxContext;
            Message    _bwxMsg;
            Clause     _bwxClause;
            Element    _bwxSubject;
            TaskResult _bwxResult;

            _bwxContext              = new Context();
            Ent_TravelContext        = new Entity("TravelContext", _bwxContext);
            _bwxSubject              = Ent_Taxi1;
            _bwxSubject              = Ent_Home1;
            _bwxClause               = _bwxContext.Add(new Clause(Ent_Belief, _bwxSubject, Ent_distanceTo, (Element)(Ent_Restaurant1)));
            _bwxClause[Ent_distance] = (float)8;
            _bwxSubject              = Ent_Restaurant1;
            _bwxSubject              = Ent_Self;
            _bwxContext.Add(new Clause(Ent_Belief, _bwxSubject, Ent_location, (Element)(Ent_Home1)));
            _bwxContext.Add(new Clause(Ent_Belief, _bwxSubject, Ent_cash, (float)(20.0f)));
            _bwxContext.Add(new Clause(Ent_Perform, Ent_Self, Ent_travelTo, (Element)(Ent_Restaurant1)));
            _bwxResult = new TaskResult(bwxTask);
            _bwxMsg    = new Message(MessageKind.Attempt, bwxTask, _bwxResult, new Clause(Ent_Perform, Ent_Self, Ent_travel, (Element)(null)));
            Post(bwxTask.Process, _bwxMsg);
            bwxTask.Process.ImportContext((Context)Ent_TravelContext.Object);
            yield return(TaskStatus.Suspended);

            if (_bwxResult.Status != TaskStatus.Succeeded)
            {
                yield return(Fail(bwxTask.Process, bwxTask.Message));
            }
            yield return(Succeed(bwxTask.Process, bwxTask.Message));
        }
示例#10
0
            public IEnumerator <TaskStatus> CreateProc(MentalTask bwxTask)
            {
                Task       _bwxTask    = null;
                Context    _bwxContext = null;
                Message    _bwxMsg;
                Clause     _bwxClause  = null;
                Atom       _bwxSubject = null;
                TaskResult _bwxResult  = null;

                Begin(bwxTask);
                ConsoleKeyInfo cki = Console.ReadKey();
                var            c   = cki.KeyChar;

                {
                    if (c == 'a')
                    {
                        _bwxMsg = new Message(MessageKind.Attempt, null, null, new Clause(Ent_Perform, Ent_Self, Ent_writeLine, 1));
                        Post(bwxTask.Process, _bwxMsg);
                    }
                    if (c == 'b')
                    {
                        _bwxMsg = new Message(MessageKind.Attempt, null, null, new Clause(Ent_Perform, Ent_Self, Ent_writeLine, 2));
                        Post(bwxTask.Process, _bwxMsg);
                    }
                    if (c == 'c')
                    {
                        _bwxMsg = new Message(MessageKind.Attempt, null, null, new Clause(Ent_Perform, Ent_Self, Ent_writeLine, 3));
                        Post(bwxTask.Process, _bwxMsg);
                    }
                }
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#11
0
            public IEnumerator <TaskStatus> CreateProc(MentalTask bwxTask)
            {
                Task       _bwxTask;
                Context    _bwxContext;
                Message    _bwxMsg;
                Clause     _bwxClause;
                Element    _bwxSubject;
                TaskResult _bwxResult;

                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#12
0
            public IEnumerator <TaskStatus> CreateProc(MentalTask bwxTask)
            {
                Task       _bwxTask    = null;
                Context    _bwxContext = null;
                Message    _bwxMsg;
                Clause     _bwxClause  = null;
                Atom       _bwxSubject = null;
                TaskResult _bwxResult  = null;

                Begin(bwxTask);
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#13
0
            public IEnumerator <TaskStatus> NotGoalElabProc(MentalTask bwxTask, Element g)
            {
                Task       _bwxTask;
                Context    _bwxContext;
                Message    _bwxMsg;
                Clause     _bwxClause;
                Element    _bwxSubject;
                TaskResult _bwxResult;

                _bwxMsg = new Message(MessageKind.Remove, bwxTask, null, new Clause(Ent_Belief, g, Ent_status, (Entity)(Ent_Active)));
                Post(bwxTask.Process, _bwxMsg);
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#14
0
            public IEnumerator <TaskStatus> BobLikesProc(MentalTask bwxTask, Atom x)
            {
                Task       _bwxTask    = null;
                Context    _bwxContext = null;
                Message    _bwxMsg;
                Clause     _bwxClause  = null;
                Atom       _bwxSubject = null;
                TaskResult _bwxResult  = null;

                Begin(bwxTask);
                Console.WriteLine("Bob likes " + x.ToString());
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#15
0
            public IEnumerator <TaskStatus> CallTaxiProc(MentalTask bwxTask, Element origin)
            {
                Task       _bwxTask;
                Context    _bwxContext;
                Message    _bwxMsg;
                Clause     _bwxClause;
                Element    _bwxSubject;
                TaskResult _bwxResult;

                _bwxMsg = new Message(MessageKind.Add, bwxTask, null, new Clause(Ent_Belief, Ent_Taxi1, Ent_location, (Element)(origin)));
                Post(bwxTask.Process, _bwxMsg);
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#16
0
        public IEnumerator <TaskStatus> CreateProc(MentalTask bwxTask)
        {
            Task       _bwxTask    = null;
            Context    _bwxContext = null;
            Message    _bwxMsg;
            Clause     _bwxClause  = null;
            Atom       _bwxSubject = null;
            TaskResult _bwxResult  = null;

            Begin(bwxTask);
            _bwxMsg = new Message(MessageKind.Attempt, null, null, new Clause(Ent_Perform, Ent_Self, Ent_sequenceTest, null));
            Post(bwxTask.Process, _bwxMsg);
            yield return(Succeed(bwxTask.Process, bwxTask.Message));
        }
示例#17
0
            public IEnumerator <TaskStatus> NotGoalElabProc(MentalTask bwxTask, Atom g)
            {
                Task       _bwxTask    = null;
                Context    _bwxContext = null;
                Message    _bwxMsg;
                Clause     _bwxClause  = null;
                Atom       _bwxSubject = null;
                TaskResult _bwxResult  = null;

                Begin(bwxTask);
                _bwxMsg = new Message(MessageKind.Remove, null, null, new Clause(Ent_Belief, g, Ent_status, Ent_Active));
                Post(bwxTask.Process, _bwxMsg);
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#18
0
            public IEnumerator <TaskStatus> NotOnTopElabProc(MentalTask bwxTask, Atom x, Atom y)
            {
                Task       _bwxTask    = null;
                Context    _bwxContext = null;
                Message    _bwxMsg;
                Clause     _bwxClause  = null;
                Atom       _bwxSubject = null;
                TaskResult _bwxResult  = null;

                Begin(bwxTask);
                _bwxMsg = new Message(MessageKind.Remove, null, null, new Clause(Ent_Belief, y, Ent_beneath, x));
                Post(bwxTask.Process, _bwxMsg);
                _bwxMsg = new Message(MessageKind.Add, null, null, new Clause(Ent_Belief, y, Ent_isClear, true));
                Post(bwxTask.Process, _bwxMsg);
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#19
0
            public IEnumerator <TaskStatus> TravelByFootProc(MentalTask bwxTask, Element destination)
            {
                Task       _bwxTask;
                Context    _bwxContext;
                Message    _bwxMsg;
                Clause     _bwxClause;
                Element    _bwxSubject;
                TaskResult _bwxResult;

                {
                    ControlFlags _bwxQflags = ControlFlags.None;
                    {
                        foreach (Element origin in bwxTask.Context.QuerySubjPred <Element>(Ent_Self, Ent_location))
                        {
                            _bwxClause = bwxTask.Context.Find(new ClausePattern(origin, Ent_distanceTo, destination));
                            if (_bwxClause != null)
                            {
                                if (_bwxClause != null && _bwxClause.Exists <float>(Ent_distance, (x) => x <= 2))
                                {
                                    _bwxQflags |= ControlFlags.PartialSuccess;
                                }
                                else
                                {
                                    _bwxQflags |= ControlFlags.PartialFailure;
                                }
                            }
                        }
                    }
                    if (_bwxQflags == ControlFlags.None || _bwxQflags == ControlFlags.PartialFailure)
                    {
                        yield return(Throw(bwxTask.Process, bwxTask.Message));
                    }
                }
                _bwxResult = new TaskResult(bwxTask);
                _bwxMsg    = new Message(MessageKind.Attempt, bwxTask, _bwxResult, new Clause(Ent_Perform, Ent_Self, Ent_walkTo, (Element)(destination)));
                Propose(bwxTask.Process, _bwxMsg, null);
                yield return(TaskStatus.Suspended);

                if (_bwxResult.Status != TaskStatus.Succeeded)
                {
                    yield return(Fail(bwxTask.Process, bwxTask.Message));
                }
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#20
0
            public IEnumerator <TaskStatus> AchieveXonYProc(MentalTask bwxTask, Atom g, Atom x, Atom y)
            {
                Task       _bwxTask    = null;
                Context    _bwxContext = null;
                Message    _bwxMsg;
                Clause     _bwxClause  = null;
                Atom       _bwxSubject = null;
                TaskResult _bwxResult  = null;

                Begin(bwxTask);
                _bwxMsg = new Message(MessageKind.Attempt, null, null, new Clause(Ent_Perform, Ent_Self, Ent_stack, x)
                {
                    { Ent_on, y }
                });
                Post(bwxTask.Process, _bwxMsg);
                _bwxMsg = new Message(MessageKind.Remove, null, null, (Clause)g);
                Post(bwxTask.Process, _bwxMsg);
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#21
0
            public IEnumerator <TaskStatus> TravelByTaxi_1Proc(MentalTask bwxTask, Element destination, Element origin, float distance)
            {
                Task       _bwxTask;
                Context    _bwxContext;
                Message    _bwxMsg;
                Clause     _bwxClause;
                Element    _bwxSubject;
                TaskResult _bwxResult;

                _bwxResult = new TaskResult(bwxTask);
                _bwxMsg    = new Message(MessageKind.Attempt, bwxTask, _bwxResult, new Clause(Ent_Perform, Ent_Self, Ent_callTaxi, (Element)(origin)));
                Propose(bwxTask.Process, _bwxMsg, null);
                yield return(TaskStatus.Suspended);

                if (_bwxResult.Status != TaskStatus.Succeeded)
                {
                    yield return(Fail(bwxTask.Process, bwxTask.Message));
                }
                _bwxResult = new TaskResult(bwxTask);
                _bwxMsg    = new Message(MessageKind.Attempt, bwxTask, _bwxResult, new Clause(Ent_Perform, Ent_Self, Ent_ride, (Element)(null)));
                _bwxMsg.Clause[Ent_from] = origin;
                _bwxMsg.Clause[Ent_to]   = destination;
                Propose(bwxTask.Process, _bwxMsg, null);
                yield return(TaskStatus.Suspended);

                if (_bwxResult.Status != TaskStatus.Succeeded)
                {
                    yield return(Fail(bwxTask.Process, bwxTask.Message));
                }
                _bwxResult = new TaskResult(bwxTask);
                _bwxMsg    = new Message(MessageKind.Attempt, bwxTask, _bwxResult, new Clause(Ent_Perform, Ent_Self, Ent_payDriver, (Element)(null)));
                _bwxMsg.Clause[Ent_from] = origin;
                _bwxMsg.Clause[Ent_to]   = destination;
                Propose(bwxTask.Process, _bwxMsg, null);
                yield return(TaskStatus.Suspended);

                if (_bwxResult.Status != TaskStatus.Succeeded)
                {
                    yield return(Fail(bwxTask.Process, bwxTask.Message));
                }
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#22
0
        public IEnumerator <TaskStatus> CreateProc(MentalTask bwxTask)
        {
            Task       _bwxTask    = null;
            Context    _bwxContext = null;
            Message    _bwxMsg;
            Clause     _bwxClause  = null;
            Atom       _bwxSubject = null;
            TaskResult _bwxResult  = null;

            Begin(bwxTask);
            _bwxContext         = new Context();
            Ent_CountingContext = new Entity("CountingContext", _bwxContext);
            _bwxSubject         = _bwxContext.Add(new Clause(Ent_Perform, Ent_Self, Ent_countTo, 5));
            _bwxContext.Add(new Clause(Ent_Belief, _bwxSubject, Ent_value, 0));
            _bwxMsg = new Message(MessageKind.Attempt, null, null, new Clause(Ent_Perform, Ent_Self, Ent_counting, null)
            {
                { Ent_context, Ent_CountingContext }
            });
            Propose(bwxTask.Process, _bwxMsg, null);
            yield return(Succeed(bwxTask.Process, bwxTask.Message));
        }
示例#23
0
            public IEnumerator <TaskStatus> TravelByTaxiProc(MentalTask bwxTask, Element destination)
            {
                Task       _bwxTask;
                Context    _bwxContext;
                Message    _bwxMsg;
                Clause     _bwxClause;
                Element    _bwxSubject;
                TaskResult _bwxResult;

                {
                    ControlFlags _bwxQflags = ControlFlags.None;
                    {
                        foreach (Element origin in bwxTask.Context.QuerySubjPred <Element>(Ent_Self, Ent_location))
                        {
                            _bwxClause = bwxTask.Context.Find(new ClausePattern(origin, Ent_distanceTo, destination));
                            if (_bwxClause != null)
                            {
                                float distance = (float)_bwxClause[Ent_distance];
                                {
                                    if (bwxTask.Context.Exists <float>(Ent_Self, Ent_cash, (x) => x >= 1.5 + .5 * distance))
                                    {
                                        _bwxQflags |= ControlFlags.PartialSuccess;
                                        _bwxMsg     = new Message(MessageKind.Callback, bwxTask, null, new Clause(Ent_Clause, Ent_Self, Ent_callback, (MessageCallback)((__bwxContext, __bwxExpert, __bwxMessage) => { Method __bwxTask = new Method(__bwxContext, __bwxMessage); __bwxContext.ScheduleTask(__bwxTask, TravelByTaxi_1Proc(__bwxTask, destination, origin, distance)); })));
                                        Post(bwxTask.Process, _bwxMsg);
                                    }
                                    else
                                    {
                                        _bwxQflags |= ControlFlags.PartialFailure;
                                    }
                                }
                            }
                        }
                    }
                    if (_bwxQflags == ControlFlags.None || _bwxQflags == ControlFlags.PartialFailure)
                    {
                        yield return(Throw(bwxTask.Process, bwxTask.Message));
                    }
                }
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#24
0
            public IEnumerator <TaskStatus> RideProc(MentalTask bwxTask, Element origin, Element destination)
            {
                Task       _bwxTask;
                Context    _bwxContext;
                Message    _bwxMsg;
                Clause     _bwxClause;
                Element    _bwxSubject;
                TaskResult _bwxResult;

                {
                    if (bwxTask.Context.Exists(Ent_Taxi1, Ent_location, origin))
                    {
                        if (bwxTask.Context.Exists(Ent_Self, Ent_location, origin))
                        {
                            _bwxMsg = new Message(MessageKind.Modify, bwxTask, null, new Clause(Ent_Belief, Ent_Taxi1, Ent_location, (Element)(destination)));
                            Post(bwxTask.Process, _bwxMsg);
                            _bwxMsg = new Message(MessageKind.Modify, bwxTask, null, new Clause(Ent_Belief, Ent_Self, Ent_location, (Element)(destination)));
                            Post(bwxTask.Process, _bwxMsg);
                        }
                    }
                }
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#25
0
            public IEnumerator <TaskStatus> FooProc(MentalTask bwxTask, Atom y)
            {
                Task       _bwxTask    = null;
                Context    _bwxContext = null;
                Message    _bwxMsg;
                Clause     _bwxClause  = null;
                Atom       _bwxSubject = null;
                TaskResult _bwxResult  = null;

                Begin(bwxTask);
                {
                    if (bwxTask.Context.Exists(y, Ent_likes, Ent_RockMusic))
                    {
                        if (bwxTask.Context.Exists(Ent_Bob, Ent_knows, y))
                        {
                            {
                                _bwxMsg = new Message(MessageKind.Add, null, null, new Clause(Ent_Belief, Ent_Bob, Ent_likes, y));
                                Post(bwxTask.Process, _bwxMsg);
                            }
                        }
                    }
                }
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }
示例#26
0
            public IEnumerator <TaskStatus> StackProc(MentalTask bwxTask, Atom g, Atom x, Atom y)
            {
                Task       _bwxTask    = null;
                Context    _bwxContext = null;
                Message    _bwxMsg;
                Clause     _bwxClause  = null;
                Atom       _bwxSubject = null;
                TaskResult _bwxResult  = null;

                Begin(bwxTask);
                {
                    ControlFlags _bwxQflags = ControlFlags.None;
                    {
                        if (!bwxTask.Context.Exists(x, Ent_isClear, true))
                        {
                            _bwxQflags |= ControlFlags.PartialSuccess;
                            {
                                _bwxMsg = new Message(MessageKind.Attempt, null, null, new Clause(Ent_Perform, Ent_Self, Ent_clear, x));
                                Post(bwxTask.Process, _bwxMsg);
                            }
                        }
                        else
                        {
                            _bwxQflags |= ControlFlags.PartialFailure;
                        }
                    }
                    if (_bwxQflags == ControlFlags.PartialSuccess)
                    {
                        {
                            yield return(Return(bwxTask.Process, bwxTask.Message));
                        }
                    }
                }
                {
                    ControlFlags _bwxQflags = ControlFlags.None;
                    {
                        if (!bwxTask.Context.Exists(y, Ent_isClear, true))
                        {
                            _bwxQflags |= ControlFlags.PartialSuccess;
                            {
                                _bwxMsg = new Message(MessageKind.Attempt, null, null, new Clause(Ent_Perform, Ent_Self, Ent_clear, y));
                                Post(bwxTask.Process, _bwxMsg);
                            }
                        }
                        else
                        {
                            _bwxQflags |= ControlFlags.PartialFailure;
                        }
                    }
                    if (_bwxQflags == ControlFlags.PartialSuccess)
                    {
                        {
                            yield return(Return(bwxTask.Process, bwxTask.Message));
                        }
                    }
                }
                {
                    foreach (Atom z in bwxTask.Context.QuerySubjPred <Atom>(x, Ent_onTop))
                    {
                        {
                            _bwxMsg = new Message(MessageKind.Remove, null, null, new Clause(Ent_Belief, x, Ent_onTop, z));
                            Post(bwxTask.Process, _bwxMsg);
                        }
                    }
                }
                _bwxMsg = new Message(MessageKind.Add, null, null, new Clause(Ent_Belief, x, Ent_onTop, y));
                Post(bwxTask.Process, _bwxMsg);
                _bwxMsg = new Message(MessageKind.Remove, null, null, (Clause)g);
                Post(bwxTask.Process, _bwxMsg);
                yield return(Succeed(bwxTask.Process, bwxTask.Message));
            }