
Merci.
J'ai donc une liste de nombre au hazard.
Comme je les additionnent un à un à chacun de mes couples de nombres
(les positions)?
xy = [(-100.0,0.0), (-15.0,5.0), (-25.0,15.0), (0.0,20.0),
(25.0,15.0),(15.0,5.0),(100.0,0.0)]
Je n'ai trouvé qu'une méthode récursive horrible:
main = do
g <- newStdGen
haz = randomRs (0.0, 20.0) $ g
myhaz haz = (haz !! 1, haz !! 2) : (myhaz (drop 2 haz))
list haz= [(x+10*x1, y+10*y1) | (x,y) <- xy | (x1,y1) <- myhaz haz]
Corentin
2008/2/13 Chaddaï Fouché
Le 13/02/08, Dupont Corentin
a écrit : J'ai trouvé ça: haz = (randoms (mkStdGen 5) :: [Double]) Qui me donne une liste de nombres psoeudo aléatoires. Comme l'utiliser? Mon problème, c'est que je ne peut l'utiliser qu'une fois, si je l'utilise une deuxième fois je retrouve les mêmes nombres ce qui ne me convient pas... En effet je voudrais obtenir une liste de positions à chaque fois différente à chaque essais.
Ce n'est pas possible tant que tu n'utilises pas la monade IO... En effet Haskell a la propriété de transparence référentielle qui dit qu'une fonction retourne toujours la même chose avec les mêmes arguments. Avec mkStdGen 5 tu crées un générateur aléatoire, mais il est complètement déterminé par 5.
Un exemple d'usage de IO :
main = do g <- newStdGen print . take 10 . randomRs (0.0, 20.0) $ g
A chaque fois que tu lanceras ce programme, la séquence sera différente.
-- Jedaï _______________________________________________ Haskell-fr mailing list Haskell-fr@haskell.org http://www.haskell.org/mailman/listinfo/haskell-fr