sS nlLogic_render(IfThen rule) { if (rule == null) null; ret nlLogic_render(rule.in) + " => " + nlLogic_render(rule.out); } sS nlLogic_render(Exp e) { if (e cast Func) ret e.name + "(" + nlLogic_render(e.arg) + ")"; if (e cast Sentence) ret join(e.tok); ret "TODO"; } srecord IfThen(Exp in, Exp out) {} sclass Exp {} srecord Func(S name, Exp arg) extends Exp {} srecord And(Exp a, Exp b) extends Exp {} srecord Sentence(L tok) extends Exp {} srecord Eq(Exp left, Exp right) extends Exp {}