J'ai joué aussi un peu avec les générateurs aléatoires, et au début ça m'a paru un peu déroutant de "trainer" la monade IO partout.
Mais en fait c'était tout a fait logique, jusque que mon code se trouvait être entièrement dans la modade IO. Le programme en question est un embryon d'algorithme génétique, donc je pense que c'est la nature du problème elle même qui veut ça. Haskell à au moins le mérite de rendre tout cela explicite.
Quelque remarques en vrac:
J'aime bien definir une fonction (>>>) qui me permet d'enchainer les fonctions, un peu à la manière d'un pipe. Je trouve cela plus lisible que les composition à outrance
Par endroit dans ton code, j'aurai plutôt utilise la fonction liftM, que le raccourci x <- ...
Sinon j'ai eu un petit problèmem avec la fontion "sequence", si tu peux m'eclairer un peu. J'ai l'impression que cette fonction n'est pas "lazy". Autrement dit si je l'applique sur une liste infinie, même pour n'en utiliser que les premiers elements, j'ai des petit problêmes de stack ;)
[^] # Re: La simplicité d'Haskell????
Posté par パパフラクス . En réponse à la dépêche Concours de logo Haskell. Évalué à 1.
J'ai joué aussi un peu avec les générateurs aléatoires, et au début ça m'a paru un peu déroutant de "trainer" la monade IO partout.
Mais en fait c'était tout a fait logique, jusque que mon code se trouvait être entièrement dans la modade IO. Le programme en question est un embryon d'algorithme génétique, donc je pense que c'est la nature du problème elle même qui veut ça. Haskell à au moins le mérite de rendre tout cela explicite.
Quelque remarques en vrac:
J'aime bien definir une fonction (>>>) qui me permet d'enchainer les fonctions, un peu à la manière d'un pipe. Je trouve cela plus lisible que les composition à outrance
x >>> f = f x
a = [1..30] >>> map (+1) >>> filter odd >>> foldl (+) 0
Par endroit dans ton code, j'aurai plutôt utilise la fonction liftM, que le raccourci x <- ...
Sinon j'ai eu un petit problèmem avec la fontion "sequence", si tu peux m'eclairer un peu. J'ai l'impression que cette fonction n'est pas "lazy". Autrement dit si je l'applique sur une liste infinie, même pour n'en utiliser que les premiers elements, j'ai des petit problêmes de stack ;)