sS ai_ruleOfThree_solver_1(S db, S input) { new TransformersOnObjects too; too.addAll(lambdaMap ai_parseBasicLogicRule(tlft(db))); too.add(Input(input)); // for word appearing in LHS and RHS: turn word into variable too.addTransformer(func(BasicLogicRule r) -> BasicLogicRule { ai_sharedWordsIntoDollarVars(r) }); // match input with rules too.addTransformer(func(BasicLogicRule r) { if (containsDollarVars(r.lhs)) too.addTransformer(func(Input i) { S s = cast i.a; for (SS map : flexMatchDollarVarsIC_all(r.lhs, s)) too.add(TransformedInput(replaceVars(r.rhs, map))); null; }); null; }); ret withDeepReturn(returnSite -> { // return first transformed input too.addTransformer(func(TransformedInput i) { deepReturn(returnSite, (S) i.a); null; }); too.think(); }); }