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 }