static SS nlLogic_expandMacros_funcShortNames = litmap( 'o, 'output, 'i, 'input); // changes original rules static void nlLogic_expandMacros(L rules) { for (IfThen r : unnull(rules)) pcall { nlLogic_expandMacros(rule); } } static IfThen nlLogic_expandMacros(IfThen r) { if (r == null) ret r; Exp out = r.out; int varCount = 0; if (out cast Func) { S name = out.name; if (eq(name, 'sayIfTrue)) { r.out = Func('output, out.arg); r.in = And(r.in, Func('fact, out.arg)); print(r); } else if (eq(name, 'inputToFact)) { r.out = Func('fact, out.arg); r.in = nlLogic_and(Func('input, restructure(out.arg)), r.in); } else if (eq(name, 'outputEval)) { S var = "$_" + ++varCount; r.out = Func('output, Sentence2(var)); r.in = And(r.in, Eq(Sentence2(var), Func('eval, out.arg))); //print("Rewritten rule => " + sfu(r)); } } nlLogic_visit(r, voidfunc(O o) { if (o cast Func) { S name = nlLogic_expandMacros_funcShortNames.get(o.name); if (name != null) o.name = name; } }); ret r; }