I haben folgende Funktion definiert:Warum bewertet diese Haskell-Anweisung nicht träge?
ex 1 x = 1
ex 0 x = 0
ex b x = b ** x
Dann, wenn ich folgendes auszuführen:
1 `ex` (sum [1..])
es versucht, die Summe der unendlichen Folge zu berechnen, anstelle von faul und 1 zurückkehrt. Warum?
EDIT: Bei der weiteren Untersuchung fand ich, dass Faulheit passiert, wenn ich die ex
Funktion in einer Datei definieren, aber nicht, wenn ich es in GHCI definieren:
$ ghci
GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help
Loading package base ... linking ... done.
Prelude> let ex 1 x = 1
Prelude> let ex b x = b ** x
Prelude> ex 1 (sum [1..])
<interactive>: out of memory (requested 1048576 bytes)
Wenn ich die ex
Definition ziehen in eine Datei (in diesem Fall test.hs):
$ ghci
GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help
Loading package base ... linking ... done.
Prelude> :load test.hs
[1 of 1] Compiling Main (test.hs, interpreted)
Ok, modules loaded: Main.
*Main> ex 1 (sum [1..])
1.0
Die neue Frage ist also, warum?
Nein, 1 'ex' (Summe [1 ..]) gibt 1.0 auf meinem Computer zurück. Welche version von ghc etc.? Und erhalten Sie mit ex 1 (Summe [1 ..]) dasselbe Ergebnis? – ShreevatsaR
Möglicherweise ein Fehler? –
@ShreevatsaR: Gute Punkte, siehe mein Update oben. – perimosocordiae