Hogyan rendezni egy listát a tuple az egyik tuple-Haskell

szavazat
-1

Van egy lista a kártyák és a rendezni kívánt kártyák listáját ([Kártya]) által suit de ahogy Card határozza teszi zavaró navigálni. Tud valaki segíteni nekem meg egy egyszerű funkció a lista rendezéséhez.

Próbáltam dolgokat, mint sortHand :: [Kártya] -> [Kártya] sortHand kéz = sort kézzel, de vidám kitalálni, hogyan lehet kiszűrni a ruha csak

Card definiáljuk: data Suit = Spade | Club | Diamond | Szív származtató (Eq, Ord, Felsorolás, Bounded)

adatok pozíciója = Two | Három | négy | öt | hat | hét | nyolc | kilenc | Tíz | Jack | queen | king | Ace származtató (Eq, Ord, Felsorolás, Bounded)

adatok Card = Kártya Suit Rank eredő (Eq)

A kérdést 24/10/2019 11:56
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
1

Ez könnyű, ha csinál Cardegy rekord típus :

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}]
Válaszolt 24/10/2019 14:41
a forrás felhasználó

szavazat
3

Ez az, amit a sortBy :: (a -> a -> Ordering) -> [a] -> [a]és comparing :: Ord b => (a -> b) -> (b -> b -> Ordering)funkciók számára. Az első lehetővé teszi Sorrend egyedi rendelés, a másik lehetővé teszi, hogy meghatározza a rendelési leképezésével a„s bizonyos bamelynek rendelési (a kártyát egy ruha ebben a példában).

Lehet használni ezeket együtt meg kell határozni

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

Meg kell jegyezni azonban, mivel hogy az automatikusan származó Ordpéldányok munka az Cardtípus lenne már megrendelt öltöny, majd az első helyezés, ha csak hozzá egy deriving Ordaz adatok meghatározása.

Válaszolt 24/10/2019 15:13
a forrás felhasználó

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