Come si fa a ordinare un elenco di tuple da una delle tuple-Haskell

voti
-1

Ho una lista di carte e voglio ordinare elenco delle schede ([Carta]) da seme, ma il modo in cui carta è definita rende fonte di confusione per navigare. Qualcuno può aiutarmi a definire una semplice funzione per ordinare l'elenco.

Provato cose come sortHand :: [Carta] -> [Scheda] sortHand mano = sorta mano, ma riesco a capire come filtrare solo il vestito

Carta è definito: i dati Suit = Spade | Club | Diamond | Cuore derivanti (Eq, Ord, Enum, delimitato)

Dati Classifica = Due | tre | quattro | cinque | Six | sette | otto | nove | Ten | Jack | Regina | king | Ace derivanti (Eq, Ord, Enum, delimitato)

Scheda Dati = Scheda del vestito Classifica derivante (Eq)

È pubblicato 24/10/2019 alle 11:56
fonte dall'utente
In altre lingue...                            


2 risposte

voti
1

Questo è facile se si effettua Cardun tipo di record :

data Card = Card { cardSuit::Suit, cardRank::Rank }
  deriving (Eq)
*Main> :m +Data.List
*Main Data.List> :m +Data.Ord
*Main Data.List Data.Ord> sortBy (comparing cardSuit) [Card Club Three, Card Diamond Two, Card Spade Eight, Card Spade Five]
[Card {cardSuit = Spade, cardRank = Eight},Card {cardSuit = Spade, cardRank = Five},Card {cardSuit = Club, cardRank = Three},Card {cardSuit = Diamond, cardRank = Two}]
Risposto il 24/10/2019 a 14:41
fonte dall'utente

voti
3

Questo è ciò che le sortBy :: (a -> a -> Ordering) -> [a] -> [a]e le comparing :: Ord b => (a -> b) -> (b -> b -> Ordering)funzioni sono per. La prima consente di ordinare da un ordinamento personalizzato, l'altro consente di definire un ordinamento per la mappatura a's per alcuni bche ha un ordinamento (una carta per un abito in questo esempio).

Si potrebbe utilizzare questi insieme per definire

sortBySuit hand = sortBy (comparing $ \(Card suit _) -> suit) hand

Nota tuttavia a causa di come i derivati automaticamente Ordistanze di lavoro il vostro Cardtipo sarebbe già essere ordinato per seme e poi rango se hai appena aggiunto un deriving Ordalla definizione dei dati.

Risposto il 24/10/2019 a 15:13
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more