[Haskell-fr] hazard

Dupont Corentin corentin.dupont at gmail.com
Wed Feb 13 09:30:37 EST 2008


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é <chaddai.fouche at gmail.com>:
> Le 13/02/08, Dupont Corentin<corentin.dupont at gmail.com> 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 at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-fr
>


More information about the Haskell-fr mailing list