Da Ihr Code äquivalent zu
ist %Vor% Der Aufruf findet tatsächlich nicht in der Endposition statt. Wenn Sie jedoch ghc -O
ausführen und das Optimierungsprogramm einschalten, zeigt Ihnen die Option -ddump-simpl
die Ausgabe des GHC-Zwischencodes an, und sie optimiert sich tatsächlich zu einer tail-rekursiven Funktion, die zu einer Schleife kompiliert wird.
Die Antwort lautet also: GHC wird dies standardmäßig nicht optimieren; Sie benötigen die Option -O
.
(Experimente mit GHC Version 6.10.1.)
Tags und Links haskell io tail-recursion