sS combineToNLPattern(S a, S b) { if (a == null || b == null) null; L tok1 = codeTokens(dropPunctuation(javaTok(a))); L tok2 = codeTokens(dropPunctuation(javaTok(b))); if (l(tok1) != l(tok2)) null; new L out; for i over tok1: { S t = tok1.get(i); out.add(eqic(t, tok2.get(i)) ? t : "*"); } ret joinWithSpace(out); } sS combineToNLPattern(Iterable l) { ret foldl_noSeed(func(S a, S b) -> S { combineToNLPattern(a, b) }, l); }