public Atom Find(ClausePattern pattern) { foreach (var clause in Clauses) { if (pattern.Match(clause)) { return(clause); } } return(null); }
// 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); }
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); }