// changes original rules static void nlLogic_expandMacros(L rules) { for (IfThen r : unnull(rules)) { continue if r == null; 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)); } else if (eq(name, 'i)) r.name = 'input; else if (eq(name, 'o)) r.name = 'output; } } }