Ich habe die folgende Funktion definiert:
%Vor%Dann, wenn ich Folgendes ausführe:
%Vor%es versucht, die Summe der unendlichen Folge zu berechnen, anstatt faul und zurück zu sein 1. Warum?
BEARBEITEN: Bei weiterer Untersuchung stellte ich fest, dass Faulheit passiert, wenn ich die Funktion ex
in einer Datei definiere, aber nicht, wenn ich sie in GHCI definiere:
Wenn ich die ex
Definition in eine Datei (in diesem Fall test.hs) ziehe:
Die neue Frage ist also warum?
In GHCi führt jede let
-Anweisung eine neue Definition von ex
ein, anstatt wie erwartet mehrere Musterfälle. Es hängt also, weil, wenn Sie ex 1 (sum [1..])
hinterher eingeben, nur die letzte ex b x = b ** x
Version existiert.
Wenn Sie eine Funktion mit mehreren Musterfällen in GHCi definieren möchten, müssen Sie sie in eine einzige let
-Anweisung setzen, etwa so:
Das gleiche gilt für alles andere, das normalerweise über mehrere Zeilen hinweg geschrieben wird, wie z. B. do
notation. Zum Beispiel eine Funktion wie folgt:
Müsste so in GHCi geschrieben werden:
%Vor%Sie definieren hier keine Funktion mit zwei Fällen. Sie definieren eine Funktion mit einem Fall und definieren sie dann erneut, indem Sie die vorherige Definition überschreiben.
Um eine Funktion mit zwei Mustern zu definieren, verwenden Sie let ex 1 x = 1; ex b x = b ** x
, d. h. trennen Sie die Fälle mit einem Semikolon.
Tags und Links haskell lazy-evaluation ghci