Eğer tanımlama grubu-Haskell biri tarafından başlığın bir listesini sıralamak nasıl

oy
-1

Ben kartların bir listesi var ve kostüm kartları ([Kart]), ancak bu şekilde tanımlanır Kart gezinmek için kafa karıştırıcı yapar listesini sıralamak istiyorum. Birisi bana listeyi sıralamak için basit bir fonksiyon tanımlamak yardımcı olabilir.

sortHand gibi şeyler çalıştı :: [Kart] -> [Kart] sortHand elden = sıralama eli ama takım sadece filtre anlamaya olamaz

Kart tanımlanır: Veri Suit = Maça | Kulüp | Elmas | Kalp türetilmesi (Denklem Ord, numaralandırma, sınırlı)

Veri Sıralaması = İki | Üç | Dört | Beş | Altı | Yedi | Sekiz | Dokuz | On | Jack | Kraliçe | Kral | As türetilmesi (Denklem Ord, numaralandırma, sınırlı)

edilen veriler Kart = Kart Takım Derece (Denklem)

Oluştur 24/10/2019 saat 11:56
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
1

Yaptığınız bu kolay Cardbir rekor türü :

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}]
Cevap 24/10/2019 saat 14:41
kaynak kullanıcı

oy
3

Bu nedir sortBy :: (a -> a -> Ordering) -> [a] -> [a]ve comparing :: Ord b => (a -> b) -> (b -> b -> Ordering)işlevleri içindir. İlk kullanıcı daha eşleyerek bir sıralama tanımlamak sağlar, özel sipariş ile sıralamanıza olanak tanır a'bazılarına s bbir sipariş (bu örnekte bir takım için bir kart) sahip olan.

Sen tanımlamak için birlikte bunlar kullanabilirsiniz

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

Ancak nedeniyle otomatik türetilmiş nasıl Not Ordörneği olduğu çalışmak Cardsadece bir katma eğer türü zaten birinci ve sonra rütbe takım tarafından sipariş olacağını deriving Ordveri tanımına.

Cevap 24/10/2019 saat 15:13
kaynak kullanıcı

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