2015-05-13 54 views
0

我想要生成一個列表,其中包含從Haskell中的數字列表中選擇兩個的所有唯一方法。所以從列表[1,2,3]我想[[1,2],[2,3],[1,3]]。順序並不重要,所以我想避免生成[1,2][2,1]兩個例子。從列表中生成唯一組合的列表

我目前的解決辦法是:

pairs :: Ord a => [a] -> [[a]] 
pairs x = nub $ map sort $ map (take 2) (permutations x) 

這不但是一個特別好的解決方案,它肯定有一些嚴重的性能問題。有沒有簡單而有效的解決方案?

回答

1
pairs xs = [[x1, x2] | (x1:xs1) <- tails xs, x2 <- xs1] 

...假設名單開出獨一無二的,或者你可以用nub撰寫此並非如此。

+0

非常好,謝謝。這就是我以後的事情。 – JimmyCo