예제 #1
0
 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);
         }
     }
 }
예제 #2
0
        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);
        }