1. #1
    Membre confirmé
    Avatar de Chatanga
    Inscrit en
    décembre 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : décembre 2005
    Messages : 186
    Points : 286
    Points
    286

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 6
    Points
    6

    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 émérite
    Inscrit en
    mars 2010
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : mars 2010
    Messages : 308
    Points : 890
    Points
    890

    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.

Discussions similaires

  1. [PERL] NET::LDAP : Mise en cache des requêtes
    Par ricomervin dans le forum Modules
    Réponses: 1
    Dernier message: 17/04/2007, 10h36
  2. [Dates] Mise en cache des pages
    Par Alex67 dans le forum Fonctions
    Réponses: 2
    Dernier message: 27/03/2007, 12h42
  3. Mise en cache des résultats SQL Server
    Par Ultiny dans le forum Accès aux données
    Réponses: 1
    Dernier message: 17/02/2007, 12h11
  4. mise en cache des result set de grosses requêtes
    Par gaboo_bl dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 16/01/2007, 13h02
  5. Empêcher la mise en cache des images
    Par oranoutan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 15/02/2006, 11h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo