Re: Prolog-style pattern matching in Java. How to?
Ulrich Scholz wrote:
On 26 Aug., 17:08, Patricia Shanahan <p...@acm.org> wrote:
Ulrich Scholz wrote:
I enjoy programming (and thinking) in Prolog but the reality requires
Java. Now I try to use the best of the former with the latter.
Thanks for your answers. You're probably right in saying that trying
to program Prolog-style in Java will lead to bad programs.
Nevertheless, I have a problem with many (~20) cases where any case
that "matches" has to be considered. (More precisely, it's a fix
point computation with an initial situation, which is extended each
time a case "matches". But the kind of computation should not matter
here.) "Matching" corresponds to the success of all of a small set of
tests, like {a>5, t is the empty string, p is not null}.
If you say: Don't do it the Prolog way, do it the Java way instead:
What is the Java way?
Ulrich
I'm not sure I understand your problem well enough for a complete
solution, but here is one idea of how I might approach it. Even if this
is not right for your problem, it may give you some bits and pieces of
ideas that help.
interface Matcher{
boolean matches(int a, String t, Object p);
}
Obviously, the parameters are just examples. Possibly there is some
object describing the current solution.
Then write an array of Matcher objects:
Matcher example1 = new Matcher(){
public boolean matches(int a, String t, Object p){
return a>5 && "".equals(t) && p != null;
}
}
Matcher example2 = new Matcher(){
public boolean matches(int a, String t, Object p){
return a>=42;
}
}
Stick references to these in an array or List:
Matcher[] allMatchers = {
example1,
example2,
someOtherMatcher,
....
};
Apply them in a loop:
for(Matcher m: allMatchers){
if(m.matches(whatever parameters)){
// Deal with a hit
}
}
Patricia