public IEnumerator <Literal> GetCandidateBeliefs(Literal l, Unifier u) { if (l.IsVar()) { return(GetEnumerator()); } else { Dictionary <PredicateIndicator, BelEntry> belsMap = belsMapDefaultNS; if (l.GetNS() != Literal.DefaultNS) { Atom ns = l.GetNS(); if (ns.IsVar()) { l = (Literal)l.CApply(u); ns = l.GetNS(); } if (ns.IsVar()) { return(GetEnumerator()); } nameSpaces.TryGetValue(ns, out belsMap); } if (belsMap == null) { return(null); } BelEntry entry = belsMap[l.GetPredicateIndicator()]; if (entry != null) { return(new EntryIteratorWrapper(entry, percepts, size)); } else { return(null); } } }
public List <Literal>[] Brf(Literal beliefToAdd, Literal beliefToDel, Intention i, bool addEnd) { // This class does not implement belief revision! It // is supposed that a subclass will do it. // It simply add/del the belief. int position = 0; if (addEnd) { position = 1; } List <Literal>[] result = null; //synchronized(bb.getLock()) //{ try { if (beliefToAdd != null) { //if (logger.isLoggable(Level.FINE)) logger.fine("Doing (add) brf for " + beliefToAdd); if (GetBB().Add(position, beliefToAdd)) { result = new List <Literal> [2]; //result[0] = SingletonList(beliefToAdd); result[0] = new List <Literal>(); result[0].Add(beliefToAdd); result[1] = new List <Literal>(); //if (logger.isLoggable(Level.FINE)) logger.fine("brf added " + beliefToAdd); } } if (beliefToDel != null) { Unifier u = null; try { u = i.Peek().GetUnif(); // get from current intention } catch (Exception e) { u = new Unifier(); } //if (logger.isLoggable(Level.FINE)) logger.fine("Doing (del) brf for " + beliefToDel + " in BB=" + believes(beliefToDel, u)); bool removed = GetBB().Remove(beliefToDel); if (!removed && !beliefToDel.IsGround()) { // then try to unify the parameter with a belief in BB IEnumerator <Literal> il = GetBB().GetCandidateBeliefs(beliefToDel.GetPredicateIndicator()); if (il != null) { while (il.MoveNext()) { Literal linBB = il.Current; if (u.Unifies(linBB, beliefToDel)) { il.Dispose(); beliefToDel = (Literal)beliefToDel.CApply(u); removed = true; break; } } } } if (removed) { //if (logger.isLoggable(Level.FINE)) logger.fine("Removed:" + beliefToDel); if (result == null) { result = new List <Literal> [2]; result[0] = new List <Literal>(); } //result[1] = SingletonList(beliefToDel); result[1] = new List <Literal>(); result[1].Add(beliefToDel); } } } catch (Exception e) { //logger.log(Level.WARNING, "Error at BRF.", e); } //} return(result); }