diff --git a/src/heuristic.c b/src/heuristic.c index 1a253db..94e5568 100644 --- a/src/heuristic.c +++ b/src/heuristic.c @@ -214,36 +214,44 @@ newkeylevel (const int level) return 1; } +struct state_tcc +{ + int leaves; + int nonvariables; +}; + +//! Simple helper for below +int +countMe (Term t, struct state_tcc *stcc) +{ + if (TermRunid (t) >= 0) + { + (stcc->leaves)++; + if (!isTermVariable (t)) + { + (stcc->nonvariables)++; + } + } + return 1; +} + //! count local constants float term_constcount (const System sys, Term t) { - int n, total; float ratio; + struct state_tcc Stcc; - int countMe (Term t) - { - if (TermRunid (t) >= 0) - { - total++; - if (!isTermVariable (t)) - { - n++; - } - } - return 1; - } - - n = 0; - total = 0; - term_iterate_deVar (t, countMe, NULL, NULL, NULL); - if (total == 0) + Stcc.nonvariables = 0; + Stcc.leaves = 0; + term_iterate_state_deVar (t, countMe, NULL, NULL, NULL, &Stcc); + if (Stcc.leaves == 0) { ratio = 1; } else { - ratio = ((total - n) / total); + ratio = ((Stcc.leaves - Stcc.nonvariables) / Stcc.leaves); } return ratio; }