!7 sclass Token { S text; CNC group; int index; toString { ret text; } } sclass CNC { S text; // if known new L tokens; } p-exp { S s = "There are 6 chess pieces. How many chess pieces do you know?"; CNC cnc1 = makeCNC("There are 6 chess pieces. How many chess pieces do you know?"); CNC cnc2 = makeCNC("There are 16 chess pieces. How many chess pieces do you know?"); L> l = zipTwoListsToPairs_ifSameLength(cnc1.tokens, cnc2.tokens); if (l == null) ret; l = antiFilter(l, func(Pair p) -> Bool { eqic(p.a.text, p.b.text) }); print("Remaining differences:"); pnl(l); } static CNC makeCNC(S s) { CNC cnc = nu(CNC, text := s); L tok = javaTokWithAngleBrackets(s); for i over tok: cnc.tokens.add(nu(Token, text := tok.get(i), group := cnc, index := i); ret cnc; }