sS combineToNLPatternIncludingPunctuation(S a, S b) { if (a == null || b == null) null; L tok1 = codeTokens(javaTok(a)); L tok2 = codeTokens(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 combineToNLPatternIncludingPunctuation(Iterable l) { ret foldl_noSeed(func(S a, S b) -> S { combineToNLPatternIncludingPunctuation(a, b) }, l); }