Bonjour,
j’ai un petit problème avec une fonction en Haskell qui construit des mobiles à partir d’une liste de nombres.
Lorsque je construit ces mobiles à partir d’une liste normale ([a]) pas de soucis, mais je veux faire une variante de
cette fonction qui mélange alétoirement cette liste. Cependant, après l’avoir modifié en faisant intervenir l’aléatoire,
je me retrouve avec une liste de type IO [a].
On m’a donc dit qu’il fallait que je reste dans Monad et que je ne pouvait plus revenir dans Haskell sans monad.
Mais le soucis c’est que j’ai du mal avec cette histoire de monad.
Voilà ce que j’ai commencé :
import System.Random
--je vous met juste les types des différentes fonctions qui sont utilisées
data Mobile = Poids Rational | Branche Rational Mobile Mobile deriving Show
poids :: Mobile -> Rational --calcule le poids d'un mobile
splity :: [a] -> ([a],[a]) --Fonction qui découpe une liste en 2
ranCreation (x:xs) =
do if xs == []
then return (Poids x) --si la liste ne contient qu'un seul élément, elle retourne (Poids x)
else let m = splity li -- sinon on (re)découpe la liste
x <- shuffle (fst m) -- et on construit récursivement 2 mobiles
y <- shuffle (snd m)
let k = ((poids y)/(poids x+poids y))
return (Branche k (ranCreation x) (ranCreation)) --que l'on met bout à bout à la fin
Voilà en espérant être à peu près clair.
Si quelqu’un peut m’aider.
Merci.