2015-05-13 4 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

Смежные вопросы