
At 3:39 PM +0000 8/22/05, Dinh Tien Tuan Anh wrote:
Hi, Basically, my program has 7 threads for 7 rules
Rule1 Rule2 .. .. ..
and they all use pattern-mattching (a rule MUST be evaluated by a thread)
The problem is there are some overlapping rules, which match the same pattern and diifferent rules are likely to give different results (one rule might give a result, others might loop forever).
Also, for a particular pattern, there's at least one matching rule and there may be some rule looping forever (try to evaluate a "bottom" _|_)
Im thinking of getting a list of all the applicable rules for a pattern, then hopefully can choose the best rule out of it. But we have no control over the scheduling of threads, so dont know when a thread finishs its evaluation (if it is applicable rule) or it just never terminates (rule that tries evaluating a _|_)
So any ideas ?
If you can't choose a single best rule, you could start a thread on each of the applicable rules and let them "race" each other. The first to complete would provide the result and terminate its "competitors". Concurrent Haskell (http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control.Concurren...) provides the facilities you'd need. Dean