Это напрямую поддерживается синтаксисом Haskell.
[(x, y) | x <- myList, y <- myList, x + y > 20000]
Возвращает парные и повторные пары.Если это не то, что вам нужно, рассмотрите следующие понятия списка:
[(x, y) | x <- myList, y <- myList, x < y, x + y > 20000] -- no reversed pairs, no repeats
[(x, y) | x <- myList, y <- myList, x <= y, x + y > 20000] -- repeats, no reversed pairs
Если по какой-то неизвестной науке причине у вас есть список с дублирующимися элементами, скажем [30000,30000]
, и вам нужны только элементы с разнымипозиции для формирования правильных пар , тогда это простое понимание списка не сработает.Я понятия не имею, что за проблема реальной жизни потребует этого, но вот вы:
[(y,z) | (y:ys) <- tails xs, z <- ys, y + z > 20000]
(идея, украденная из другого ответа)