如何在Haskell中提取列表的所有唯一对?

时间:2015-12-02 13:48:24

标签: list haskell

我对Haskell很新,我有一个问题。如何编写函数来返回列表中所有唯一可能的对?喜欢: [1,2,3,4] - > [(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)]

3 个答案:

答案 0 :(得分:21)

使用列表理解是最简单的方法。

import Data.List

pairs :: [a] -> [(a, a)]
pairs l = [(x,y) | (x:ys) <- tails l, y <- ys]

这仅生成相关对,因此您不必将任何重复项过滤为单独的步骤。 tails [1,2,3,4]生成尾部列表[[1,2,3,4], [2,3,4], [3,4], [4], []],列表推导从每个尾部中选取第一个元素,并将其与该尾部的其余元素配对。

答案 1 :(得分:1)

您可以使用nub功能:

import Data.List
uniq_pairs l = nub [(x,y) | x <-l, y<-l, x < y]

输出:

*Main> uniq_pairs  [1,2,3,4]
[(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)]

答案 2 :(得分:1)

看看你的例子,这似乎就是你想要的

unique_pairs l = [(x,y) | x <- l, y <- l, x < y]

顺便说一句,这些不只是唯一对,而是唯一配对转换