From stephane+haskell-fr at bortzmeyer.org Thu Feb 7 15:25:50 2008 From: stephane+haskell-fr at bortzmeyer.org (Stephane Bortzmeyer) Date: Thu Feb 7 15:26:04 2008 Subject: [Haskell-fr] Calculs calendaires en Haskell Message-ID: <20080207202550.GA14370@sources.org> Je ne suis sans doute pas le seul ? avoir programm? les fonctions du livre "Calendrical calculations" en Haskell mais moi, je les ai d?crites en fran?ais :-) http://www.bortzmeyer.org/calculs-calendaires-en-haskell.html From corentin.dupont at gmail.com Wed Feb 13 07:18:06 2008 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Wed Feb 13 07:16:41 2008 Subject: [Haskell-fr] hazard Message-ID: <18a05e6b0802130418y50ad86d3r3e45b683f21c3937@mail.gmail.com> Salut ? tous! Je cherche un moyen simple d'ajouter du bruit sur une liste de positions: J'ai une liste comme ?a: 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)] Et je voudrais obtenir une liste dont chaque position est d?cal?e d'une valeur prise au hazard. 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. Merci! Corentin From chaddai.fouche at gmail.com Wed Feb 13 07:49:21 2008 From: chaddai.fouche at gmail.com (=?ISO-8859-1?Q?Chadda=EF_Fouch=E9?=) Date: Wed Feb 13 07:47:59 2008 Subject: [Haskell-fr] hazard In-Reply-To: <18a05e6b0802130418y50ad86d3r3e45b683f21c3937@mail.gmail.com> References: <18a05e6b0802130418y50ad86d3r3e45b683f21c3937@mail.gmail.com> Message-ID: 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? From corentin.dupont at gmail.com Wed Feb 13 09:30:37 2008 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Wed Feb 13 09:29:12 2008 Subject: [Haskell-fr] hazard In-Reply-To: References: <18a05e6b0802130418y50ad86d3r3e45b683f21c3937@mail.gmail.com> Message-ID: <18a05e6b0802130630s50d49b21ka98bc0d7fb01f710@mail.gmail.com> 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 > From chaddai.fouche at gmail.com Wed Feb 13 14:03:44 2008 From: chaddai.fouche at gmail.com (=?ISO-8859-1?Q?Chadda=EF_Fouch=E9?=) Date: Wed Feb 13 14:02:19 2008 Subject: [Haskell-fr] hazard In-Reply-To: <18a05e6b0802130630s50d49b21ka98bc0d7fb01f710@mail.gmail.com> References: <18a05e6b0802130418y50ad86d3r3e45b683f21c3937@mail.gmail.com> <18a05e6b0802130630s50d49b21ka98bc0d7fb01f710@mail.gmail.com> Message-ID: Le 13/02/08, Dupont Corentin 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?