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.
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 areInsidePolygon :: Polygon -> [Point] -> Bool areInsidePolygon polygon points = and $ map (isInsidePolygon polygon) points
Ajout : et est-ce que ça changerait quelque chose de l'écrire comme ceci ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 areInsidePolygon :: Polygon -> [Point] -> Bool areInsidePolygon polygon = and $ map (isInsidePolygon polygon)
Partager