9
votes

Haskell - Compréhension de la liste des prédicats d'optimisation

Ceci est un exemple de vous apprendre un haskell: xxx

donc, qu'est-ce qui se passe ici, x * y être calculé deux ou une fois?


2 commentaires

C'est au compilateur.


Pour donner une autre alternative imo nicer haskell que celle de MOG, considère filtre (> 50) [x * y | x <- [2,5,10], Y <- [8,10,11]]


3 Réponses :


19
votes

Pour être sûr du comportement du compilateur, préférez:

[ product | x <- [2, 5, 10]
          , y <- [8, 10, 11]
          , let product = x * y
          , product > 50] 


0 commentaires

21
votes

Il serait calculé deux fois à moins que l'élimination commune de la sousexpression ne se produise.

Selon l'inlinisation et votre niveau d'optimisation, GHC peut faire des choses assez agressives avec la compréhension de la liste.

En général, vous devez partager explicitement des expressions communes pour garantir le partage.


0 commentaires

7
votes

En regardant dans le noyau lors de la compilation avec l'option -o2, il a suivi des lignes suivantes (pertinentes et simplifiées) xxx

indique clairement que la multiplication est calculée deux fois, il est donc préférable d'utiliser une expression courante. pour prévenir les recomutions.


0 commentaires