Πώς μπορείτε να ταξινομήσετε μια λίστα με πλειάδα από μία της πλειάδας-Haskell

ψήφοι
-1

Έχω μια λίστα με κάρτες και θέλετε να ταξινομήσετε τη λίστα των καρτών ([Κάρτα]) από το κοστούμι, αλλά ο τρόπος με κάρτα ορίζεται καθιστά σύγχυση στην πλοήγηση. Μπορεί κάποιος να με βοηθήσει να ορίσετε μια απλή λειτουργία για να ταξινομήσετε τη λίστα.

Προσπάθησε πράγματα όπως sortHand :: [Κάρτα] -> [Κάρτα] sortHand χέρι = το χέρι του είδους, αλλά επίκλισης να καταλάβω πώς να φιλτράρετε μόνο το κοστούμι

Κάρτα ορίζεται: Κοστούμι δεδομένων = Spade | Λέσχη | Diamond | Καρδιά απορρέουν (Eq, Ord, Enum, οριοθετείται)

Η κατάταξη των δεδομένων = Δύο | τρία | τέσσερις | πέντε | έξι | επτά | οκτώ | εννέα | Δέκα | Jack | Queen | Ο βασιλιάς | Ace απορρέουν (Eq, Ord, Enum, οριοθετείται)

Κάρτα δεδομένων = Κάρτα κοστούμι κατάταξη που προκύπτει (EQ)

Δημοσιεύθηκε 24/10/2019 στις 11:56
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
1

Αυτό είναι εύκολο, αν κάνετε Cardένα είδος ρεκόρ :

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}]
Απαντήθηκε 24/10/2019 στις 14:41
πηγή χρήστη

ψήφοι
3

Αυτό είναι ό, τι οι sortBy :: (a -> a -> Ordering) -> [a] -> [a]και comparing :: Ord b => (a -> b) -> (b -> b -> Ordering)οι λειτουργίες είναι για. Η πρώτη σας επιτρέπει να ταξινομήσετε από μια προσαρμοσμένη παραγγελία, ο άλλος σας επιτρέπει να ορίσετε μια διάταξη από τη χαρτογράφηση a«s σε κάποια bπου έχει μια διάταξη (μια κάρτα για ένα κοστούμι σε αυτό το παράδειγμα).

Θα μπορούσατε να χρησιμοποιήσετε αυτά μαζί για να καθορίσουν

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

Σημείωση ωστόσο, λόγω της πώς τα αυτόματα προέρχονται Ordπεριπτώσεις λειτουργήσει το Cardείδος θα είχε ήδη καταδικαστεί από το παράδειγμά τους και στη συνέχεια κατάταξη αν απλά προστεθεί deriving Ordστον ορισμό των δεδομένων σας.

Απαντήθηκε 24/10/2019 στις 15:13
πηγή χρήστη

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