• [^] # Re: Autre petit problème

    Posté par . 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.

    Merci à vous.