Ich bin verwirrt, warum meine Funktion, nest
die f
mit sich selbst komponiert , n
mal ist
nest f 0 = id
nest f n = f . nest f (n - 1)
endet nie. Ich hätte gedacht, dass es "Musterübereinstimmung" für den Fall geben würde, wenn n
Null wird. Ich definiere es, indem ich diese beiden Zeilen in GHCI eingebe und nest (+ 1) 2 3
zum Beispiel mit anrufe .
nest (+1) 3 2
es mit endet5
.nest (+1) 3 2
.Antworten:
Indem Sie die Funktion in zwei separate REPL-Zeilen eingeben, definieren Sie sie beim zweiten Mal im Wesentlichen neu, wobei der Basisfall weggelassen wird.
Der richtige Weg, um diese Funktion in die REPL einzugeben, ist:
Alternativ können Sie mit dem
:{
Befehl in den mehrzeiligen Modus wechseln und ihn mit verlassen:}
.quelle
Als Sie es in GHCi eingefügt haben, haben Sie eine Funktion von definiert
nest f 0 = id
. Dann sagten Sie: "Ignorieren Sie diese Funktion, ich ersetze sie durch eine neue Funktion mit demselben Namen, in der sich die gesamte Definition befindetnest f n = f . nest f (n - 1)
.quelle