[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