Ich lerne Haskell und habe Probleme mit einer faktoriellen Funktion von this tutorial.Haskell basic factorial nicht beenden?
Im Grunde habe ich eine faktorielle als solche definiert:
Prelude> let factorial 0 = 1
Prelude> let factorial n = n * factorial (n - 1)
Die Art auscheckt:
Prelude> :t factorial
factorial :: Num a => a -> a
was Sinn macht. Das Verhalten dieser Funktion ist jedoch nicht. Es ergibt sich (interactive): out of memory
egal was die Eingabe ist.
Prelude> factorial 5
(interactive): out of memory
Ich muß davon ausgehen, das ein unendlicher rekursiven Aufruf zu einem außerhalb des Speicherfehlers führt, aber ich bin mir nicht sicher, was es möglicherweise verursachen könnte. Das gleiche geschieht mit factorial 0
, obwohl ich ausdrücklich diesem 1 sein deklariert haben:
Prelude> factorial 0
(interactive): out of memory
Nun, hier ist der seltsame Teil: Wenn ich die Fakultäts-Funktion in einer Datei definieren, es funktioniert gut. Ich erstelle eine Datei tesths.hs
s.t .:
factorial 0 = 1
factorial n = n * factorial (n - 1)
Dann, wenn ich GHCI zurück gehen und laufen :l tesths.hs
, ich factorial 5
ohne Fehler ausführen kann.
Was geht hier vor?
Huh. Macht Sinn, nehme ich an. Das ist ein seltsames Verhalten. – Zyerah
Es ist. 'lass ...' in ghci ist wirklich "lass ... in". Dies ist definitiv nicht das einzige, was an ghci etwas seltsam ist - ein Ergebnis wird unterschiedlich angezeigt, je nachdem, ob es vom Typ 'Show a => a ',' Show a => IO a' oder 'IO()' ist. – ScootyPuff
Das macht ein bisschen Sinn. Es hängt von der Art der Eingabe ab, die in fast jeder Sprache benötigt wird: – Zyerah