Ceci est un exemple de vous apprendre un haskell: donc, qu'est-ce qui se passe ici, x * y code> être calculé deux ou une fois? p> p>
3 Réponses :
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]
Il serait calculé deux fois à moins que l'élimination commune de la sousexpression ne se produise. P>
Selon l'inlinisation et votre niveau d'optimisation, GHC peut faire des choses assez agressives avec la compréhension de la liste. P>
En général, vous devez partager explicitement des expressions communes pour garantir le partage. P>
En regardant dans le noyau lors de la compilation avec l'option -o2, il a suivi des lignes suivantes (pertinentes et simplifiées) 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. p> p>
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]] code>