コード例 #1
0
ファイル: DesireStdLib.cs プロジェクト: nasa03/Jasonity
            void Find()
            {
                switch (curStep)
                {
                case Step.selEvt:
                    curStep = Step.evt;     // set next step

                    // we need to check the selected event in this cycle (already removed from E)
                    if (C.GetSelectedEvent() != null)
                    {
                        Trigger   t = C.GetSelectedEvent().GetTrigger();
                        Intention i = C.GetSelectedEvent().GetIntention();
                        if (i != Intention.emptyInt && !i.IsFinished())
                        {
                            t = (Trigger)t.Capply(i.Peek().GetUnif());
                        }
                        solution = un.Clone();
                        if (solution.UnifiesNoUndo(teFromL, t))
                        {
                            return;
                        }
                    }
                    Find();
                    return;

                case Step.evt:
                    if (evtIterator == null)
                    {
                        evtIterator = C.GetEventsPlusAtomic();
                    }

                    if (evtIterator.MoveNext())
                    {
                        Event     ei = evtIterator.Current;
                        Trigger   t  = ei.GetTrigger();
                        Intention i  = ei.GetIntention();
                        if (i != Intention.emptyInt && !i.IsFinished())
                        {
                            t = t.Capply(i.Peek().GetUnif());
                        }
                        solution = un.Clone();
                        if (solution.UnifiesNoUndo(teFromL, t))
                        {
                            return;
                        }
                    }
                    else
                    {
                        curStep = Step.useIntends;     // set next step
                    }
                    Find();
                    return;

                case Step.useIntends:
                    if (intendInterator == null)
                    {
                        intendInterator = AllIntentions(C, l, intAsTerm, un);
                    }

                    if (intendInterator.MoveNext())
                    {
                        solution = intendInterator.Current;
                        return;
                    }
                    else
                    {
                        curStep = Step.end;     // set next step
                    }
                    break;

                case Step.end:
                    break;
                }
                solution = null; //nothing found
            }