Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Haskell
Haskell Forum d'entraide sur la programmation en langage fonctionnel Haskell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 06/02/2011, 19h13   #1
Chatanga
Membre confirmé
 
Avatar de Chatanga
 
Inscription : décembre 2005
Messages : 165
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 165
Points : 233
Points : 233
Par défaut Mise en cache systématique des résultats ?

Bonjour,

Voici une petite question sur la capacité d'optimisation élémentaire du code par Haskell.

La fonction areInsidePolygon suivante fait appel à une fonction isInsidePolygon qui découpe son polygone d'entrée en sous-polygones convexes et teste la présence d'un point donné dans chacun d'entre eux. Ce découpage est une opération couteuse qui est réalisée pour chacun des points de la liste sur laquelle itère la fonction map.

Code :
1
2
areInsidePolygon :: Polygon -> [Point] -> Bool
areInsidePolygon polygon points = and $ map (isInsidePolygon polygon) points
Grâce à la transparence référentielle, le compilateur ne doit avoir aucun mal à optimiser tout ça, c'est à dire ne réaliser le découpage qu'une seule fois et de garder en mémoire la liste de sous-polygones convexes. Peut-être même que cette optimisation se produit à l'exécution et non à la compilation. Qu'en est-il réellement ? Mon but n'est pas tant de gagner des millisecondes mais de savoir si ça a un sens de récrire un tel code dans un but d'optimisation ou bien si on peut se reposer sur Haskell.

Ajout : et est-ce que ça changerait quelque chose de l'écrire comme ceci ?

Code :
1
2
areInsidePolygon :: Polygon -> [Point] -> Bool
areInsidePolygon polygon = and $ map (isInsidePolygon polygon)
Chatanga est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 12h43   #2
Nel_Star
Invité régulier
 
Inscription : juillet 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 10
Points : 5
Points : 5
Bonjour,
Je ne sais pas pour ta premiere question mais concernant ta simplification ça marche.
http://learnyouahaskell.com/higher-o...unctions#folds
C'est mentionné dans la solution de sum'.
Salut.

EDIT: oups j'avais pas vu la date...
Nel_Star est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 09h27   #3
TropMDR
Membre chevronné
 
Inscription : mars 2010
Messages : 281
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 281
Points : 752
Points : 752
Haskell ne fait pas de mémoization automatique. Néanmoins, si tu as "bien" écrit isInsidePolygon, ça va marcher. Par là j'entends : l'application de isInsidePolygon à un polygon calcule le découpage, puis retourne une fonction qui à un point associe un booléen. Dans ce cas, le découpage ne sera effectivement effectué qu'une seule fois dans areInside.
TropMDR est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h46.


 
 
 
 
Partenaires

Hébergement Web