В Haskell дан список элементов, xs
, самый простой способ для перебора всех пар перестановок с повторениями является:перебрать все комбинации пар без повторения в Haskell
[(x,y) | x <- xs, y <- xs]
Я хочу быть в состоянии сделать то же, но только по комбинациям. Если х и у сравнимы, я мог бы сделать
[(x,y) | x <- xs, y <- xs, x > y]
Но я предпочел бы решение, которое является более общим и более эффективным (я знаю, что asympotitic сложности будет оставаться в квадрате, но мы можем вдвое сократить фактическую сложность выполнения, избегая использование условия фильтрации)