예제 #1
0
 public Atom Find(ClausePattern pattern)
 {
     foreach (var clause in Clauses)
     {
         if (pattern.Match(clause))
         {
             return(clause);
         }
     }
     return(null);
 }
예제 #2
0
 //
 public bool Match(Message msg)
 {
     if (Kind != msg.Kind)
     {
         return(false);
     }
     if (Kind == MessageKind.Nil)
     {
         return(true);
     }
     if (!ClausePattern.Match(msg.Clause))
     {
         return(false);
     }
     return(true);
 }
예제 #3
0
        public bool Exists <T>(Atom subj, AtomType pred, T obj)
        {
            ClausePattern target = new ClausePattern(subj, pred, obj);

            foreach (var clause in Clauses)
            {
                if (clause.Predicate != pred)
                {
                    continue;
                }
                if (target.Match(clause))
                {
                    return(true);
                }
            }
            return(false);
        }