Im un étudiant qui est vraiment nouveau à la programmation fonctionnelle. Im travaillant sur une application bancaire où les données ont déjà été définies comme,Comment trier la liste par son accountID en utilisant le tri rapide dans Haskell
type Accountno = Int
data Accounttype = Saving | Current | FixedDeposit deriving (Show,Read)
type Accountamount = Int
type Name = String
type Account = (Accountno, Name, Accounttype, Accountamount)
exampleBase :: [Account]
exampleBase = [ (1,"Jennifer",Saving,1000) ,
(5,"Melissa",Current,3000) ,
(2,"Alex",Saving,1500)]
Im essayant de trier la liste par son numéro de compte en utilisant le code suivant,
sortByID :: (Ord a) => [a] -> [a]
sortByID [] = []
sortByID (l :ls) =
let
smallerSorted = sortByID [x | x <- ls, x <= l]
biggerSorted = sortByID [x | x <- ls, x > l]
in
smallerSorted ++ [l] ++ biggerSorted
viewSortedDetails :: IO()
viewSortedDetails =
do
putStrLn "Account Details Sorted By Account ID"
let records = sortByID exampleBase
let viewRecord = map show records
mapM_ putStrLn viewRecord
Mais je n'obtenir le résultat attendu. comme il me donne une erreur, en informant "Instance de Ord Accounttype nécessaire pour la définition de viewSortedDetails". S'il vous plaît quelqu'un peut m'aider à surmonter ce problème Merci beaucoup!
Merci beaucoup pour votre réponse. Beaucoup apprécié. J'ai essayé la deuxième méthode que vous avez mentionnée. Mais encore il me donne une erreur d'information, le type inféré n'est pas assez général *** Expression: sortByID *** Type attendu: Ord a => [a] -> [a] *** Type déduit: Ord (Int, [Char], Type de compte, Int) => [(Int, [Char], Type de compte, Int)] -> [(Int, [Char], Accounttype, Int)] Pouvez-vous être assez aimable pour m'aider avec cette . Encore une fois merci beaucoup. – user421607
@ user421607: Extraire un élément du tuple met plus de restrictions sur le type en cours de tri: Il nécessite une liste de 'Account', pas une liste générique comme' [a] '. Si vous supprimez simplement la signature de type, elle devrait en déduire la bonne, mais '[Account] -> [Account]' devrait être ce qu'elle veut. –
Je me suis fatigué de cette manière aussi ... Mais ça m'a quand même donné des erreurs. J'essaie d'abord ta méthode. Merci beaucoup pour l'aide. – user421607