Nehmen wir an, ich habe eine Funktion, die die Potenz von vier einer durch
definierten Zahl berechnen kann %Vor%Und ich versuche, x = (3 + 8) * 2
zu übergeben %Vor%Da in Haskell die Werte ausgewertet werden, bis sie benötigt werden, bedeutet das, dass x vier Mal auswertet? Wenn ja, gibt es eine Möglichkeit, den Haskell-Compiler zu verbessern?
Danke.
Nein, es wird nur einmal ausgewertet. In call by name würde es vier Mal ausgewertet, aber alle Haskell-Implementierungen sind call by need (obwohl der Standard dies nicht erfordert), was bedeutet, dass jeder Ausdruck ausgewertet wird höchstens einmal.
Dies gilt nur, wenn der Ausdruck vollständig konkret ist. Z.B. Es gibt keine Garantie, dass in:
%Vor% Bei der Berechnung von bar
wird (1+2)
nur einmal ausgewertet. Tatsächlich wird es wahrscheinlich zweimal ausgewertet (wenn ohne Optimierungen kompiliert).
Tags und Links haskell lazy-evaluation