2014-09-01 2 views
0

В настоящее время у меня есть список карт, теперь я хочу показать все возможные пары карт в другом списке. Например: [(Card Club R2, Card Heart R3), (Card Club R2, Card Heart R4), (Card Club R2, Card Heart R5), (Card Club R2, Card Heart R6).........]. Общий результат может быть 1326 различных парHaskell пара две карты

+1

Я не знаю достаточно о вашем костюме и ранга - но это должно работать: '[(c1, c2) | c1 <- allCards, c2 <- allCards, c1/= c2] ', если вы получили' Eq' – Carsten

+2

@ CarstenKönig: подсчет OP (1326) предполагает, что дублирующие пары (т. е. X, Y против Y, X) должны быть устранены. Может быть достигнуто с помощью 'c1

ответ

2

Вобще

[ (c1, c2) | c1 <- allCards, c2 <- allCards, c1 /= c2 ] 

Но это вернет 2652 пар, как уже упоминалось.

Для restict это 1326 пар, либо сделать как предложено Zeta или добавить Ord к Card:

[ (c1, c2) | c1 <- allCards, c2 <- allCards, c1 < c2 ] 
+1

Вы можете нарисовать одну и ту же карту дважды там, и почему бы не рисовать из 'allCards'? Ваш код будет намного короче: '[(c1, c2) | c1 <- allCards, c2 <- allCards, c1/= c2] ' – Carsten

+0

спасибо, так что это тип нового списка, например [Card] - это список отдельных карточек? –

+0

@PeiChuang Его '' [(Карточка, карточка)] '' – ThreeFx

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