[Haskell-fr] hazard
Chaddaï Fouché
chaddai.fouche at gmail.com
Wed Feb 13 14:03:44 EST 2008
Le 13/02/08, Dupont Corentin<corentin.dupont at gmail.com> a écrit :
> 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]
On peut faire un peu plus joli (à mon avis) :
> main = do
> g <- newStdGen
> let haz = randomRs (0.0, 200.0) $ g
> print $ zipWith (<+>) xy (splitEach 2 haz)
> where splitEach n = takeWhile (not.null) . unfoldr (Just . splitAt n)
> (a,b) <+> [a',b'] = (a+a',b+b')
Ou un truc comme ça. splitEach est une fonction généralement utile,
personnellement je l'ai mis dans une petite librairie.
Néanmoins il n'y a pas non plus de recette miracle.
--
Jedaï
More information about the Haskell-fr
mailing list