2016-07-15 3 views
2

En ce qui concerne l'évaluation des applications fonctionnelles, Haskell ne prend-il en charge que la réduction normale des ordres ou prend-il également en charge la réduction des commandes applicatives? Ai-je raison de penser que l'ordre normal est ce qui donne à Haskell sa paresse?Réduction de commande normale/applicative

Répondre

2

Le moteur d'exécution GHC n'utilise pas de stratégie de réduction des termes, car cela serait très inefficace. En effet, GHC est un compilateur approprié, ciblant la machine STG comme une machine abstraite pour son exécution. Cependant, il atteint la même sémantique de réduction d'ordre normal - c'est-à-dire une sémantique non stricte.

On peut encore forcer certains arguments à évaluer, comme dans la réduction de l'ordre comme suit applicatif:

foo x y = x `seq` actualFoo x y 

Au-dessus, x est évalué immédiatement, alors que y n'est pas.

D'autres modèles équivalents communs:

foo x y | seq x False = undefined 
foo x y = actualFoo x y 

-- or, with a GHC extension 

foo !x y = actualFoo x y