2016-07-15 18 views
2

In Bezug auf die Evaluierung von Funktionsanwendungen unterstützt Haskell nur die normale Auftragsreduktion oder unterstützt es auch die anwendungsspezifische Auftragsreduktion? Habe ich Recht damit, dass normale Ordnung das ist, was Haskell seine Faulheit gibt?Normal/Applicative Order Reduction

Antwort

2

Die GHC-Laufzeit verwendet keine Termreduktionsstrategie, da dies sehr ineffizient wäre. In der Tat ist GHC ein richtiger Compiler, der die STG-Maschine als eine abstrakte Maschine für ihre Laufzeit anvisiert.

Dennoch erreicht es die gleiche Semantik der normalen Ordnung Reduktion - d. H. Nicht strikte Semantik.

Man kann zwingen, noch einige Argumente bewertet werden, wie in applicative Reduktion um wie folgt:

foo x y = x `seq` actualFoo x y 

Oben, x sofort ausgewertet wird, während y nicht.

Andere übliche Muster äquivalent:

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

-- or, with a GHC extension 

foo !x y = actualFoo x y