Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre confirmé
    Avatar de Chatanga
    Inscrit en
    décembre 2005
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : décembre 2005
    Messages : 184
    Points : 260
    Points
    260

    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)

  2. #2
    Invité régulier
    Inscrit en
    juillet 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : juillet 2011
    Messages : 10
    Points : 5
    Points
    5

    Par défaut

    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...

  3. #3
    Membre chevronné
    Inscrit en
    mars 2010
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : mars 2010
    Messages : 308
    Points : 793
    Points
    793

    Par défaut

    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.

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •