private bool MatchParametersToPredicateDeclaration(ParametrizedPredicate pp, Domain d) { foreach (Predicate pDefinition in d.Predicates) { if (pDefinition.Name == pp.Name) { if (pDefinition is ParametrizedPredicate) { ParametrizedPredicate ppDefinition = (ParametrizedPredicate)pDefinition; if (pp.Parameters.Count() != ppDefinition.Parameters.Count()) { return(false); } for (int i = 0; i < pp.Parameters.Count(); i++) { if (ppDefinition.Parameters.ElementAt(i).Type == "") { ppDefinition.Parameters.ElementAt(i).Type = pp.Parameters.ElementAt(i).Type; } else if (!d.ParentOf(ppDefinition.Parameters.ElementAt(i).Type, pp.Parameters.ElementAt(i).Type)) { return(false); } } return(true); } } } return(false); }
public Dictionary <string, Constant> Bind(ParametrizedPredicate p, Domain d) { if (Name != p.Name) { return(null); } if (((List <Constant>)Constants).Count != ((List <Argument>)p.Parameters).Count) { return(null); } Dictionary <string, Constant> dBindings = new Dictionary <string, Constant>(); for (int i = 0; i < Constants.Count; i++) { Argument arg = p.Parameters.ElementAt(i); if (arg is Constant) { if (!Constants[i].Equals(arg)) { return(null); } } if (arg is Parameter) { if (!d.ParentOf(arg.Type, Constants[i].Type)) { return(null); } dBindings[arg.Name] = Constants[i]; } } return(dBindings); }