我对Haskell很新,我有一个问题。如何编写函数来返回列表中所有唯一可能的对?喜欢: [1,2,3,4] - > [(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)]
答案 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]
顺便说一句,这些不只是唯一对,而是唯一配对转换。