sclass NLLogicChecker_v3 extends NLLogicChecker_v2 { void iterate(final Exp e, final Matching m, final Runnable onMatch) { if (e cast And) iterate(e.a, m, r { iterate(e.b, m, onMatch }); if (e cast Func) { if (eq(e.name, "fact")) { S pat = nlLogic_text(e.arg); for (S fact : facts) { temp tempBackupMatches(m); print("matching " + pat + " with " + fact); if (matcher.match(pat, fact, m.matches)) callF(onMatch); } } } } }