sclass AI_CalculationBot > AttractorBot { bool greet = true; run { if (greet) say("I can calculate things for you"); } // CONFIG class CalcAttractor > Attractor { S op; L arguments; public bool matches(S s) { LS l = regexpFirstGroups("(\\d+)\\s*[x*]\\s*(\\d+)", s); if (l(l) == 2) { op = f mul; arguments = map bigint(l); true; } l = splitAtPlus(s); if (l(l) > 1 && all isInteger(l)) { op = f plus; arguments = map bigint(l); true; } false; } run { say(str(foldl_noSeed(op, arguments))); } } *() { standardAttractors(new CalcAttractor); } }