Posté par eoutin .
En réponse au message Haskell.
Évalué à 1.
Ouai, j'avais pas vu pour le double post, désolé.
Pour en revenir à mon problème, j'ai bien compris que c'était bien compliqué cette histoire de monad IO.
Je vous met aussi la fonction dans laquelle je veut réutiliser ma liste mélangée aléatoirement.
data Mobile = Poids Rational | Branche Rational Mobile Mobile deriving Show
poids :: Mobile -> Rational
poids (Poids n) = n
poids (Branche _ g d) = poids g + poids d
shuffle' [] acc = return acc
shuffle' l acc =
do k <- randomRIO (0, length l - 1)
let (lead, x:xs) = splitAt k l
shuffle' (lead ++ xs) (x:acc)
shuffle :: [a] -> IO [a]
shuffle l = shuffle' l []
ranCreation :: [Rational] -> Mobile
ranCreation [] = (Poids 0)
ranCreation [p] = (Poids p)
ranCreation li = let m = splity li; x = (fst m); y = (snd m); k = (poids (ranCreation y))/(poids (ranCreation x) + poids (ranCreation y))
in ((Branche k) (ranCreation x) (ranCreation y))
splity :: [a] -> ([a],[a]) --Fonction qui découpe une liste en 2
splity x = let n = div (length x) 2
in splitAt n x
Ma fonction ranCreation me permettrai donc de créer des mobiles aléatoires, en mélangeant à chaque fois les listes de poids.
[^] # Re: Autre petit problème
Posté par eoutin . En réponse au message Haskell. Évalué à 1.
Pour en revenir à mon problème, j'ai bien compris que c'était bien compliqué cette histoire de monad IO.
Je vous met aussi la fonction dans laquelle je veut réutiliser ma liste mélangée aléatoirement.
data Mobile = Poids Rational | Branche Rational Mobile Mobile deriving Show
poids :: Mobile -> Rational
poids (Poids n) = n
poids (Branche _ g d) = poids g + poids d
shuffle' [] acc = return acc
shuffle' l acc =
do k <- randomRIO (0, length l - 1)
let (lead, x:xs) = splitAt k l
shuffle' (lead ++ xs) (x:acc)
shuffle :: [a] -> IO [a]
shuffle l = shuffle' l []
ranCreation :: [Rational] -> Mobile
ranCreation [] = (Poids 0)
ranCreation [p] = (Poids p)
ranCreation li = let m = splity li; x = (fst m); y = (snd m); k = (poids (ranCreation y))/(poids (ranCreation x) + poids (ranCreation y))
in ((Branche k) (ranCreation x) (ranCreation y))
splity :: [a] -> ([a],[a]) --Fonction qui découpe une liste en 2
splity x = let n = div (length x) 2
in splitAt n x
Ma fonction ranCreation me permettrai donc de créer des mobiles aléatoires, en mélangeant à chaque fois les listes de poids.
Merci à vous.