Ich bin ratlos, Rekursion in einer Monade zu verstehen. Vom haskell.org Wiki ist hier ein Beispiel: rekursivRekursion in einer Monade
main = f 3
f 0 = return []
f n = do v <- getLine
vs <- f (n-1)
return $! v : vs
Dieses Programm wird drei Zeilen von der Standardeingabe. Was ich nicht verstehen kann ist, was passiert, wenn man zu f 0 kommt und wie die Rekursion abläuft. Wie wird der Endwert des do-Blocks aufgebaut? Warum wird in der Rekursion die letzte Rückleitung wiederholt aufgerufen? Ich weiß, dass Rückkehr nicht Funktionsrückgabe wie in Imperativsprachen ist, aber ich kann nicht sehen, wie diese Linie wiederholt wird.
Ich bin mir bewusst, dass dies eine rohe Anfänger Frage ist, aber ich bin ratlos.
Versuchen Sie auf dem Papier, den Aufruf von 'f' in' vs <- f (n-1) 'mit der Definition von f zu ersetzen, bis Sie ihn vollständig erweitert haben. – Squidly
BTW, wenn '$!' '' Seq' ist, sieht seine Verwendung sinnlos aus, da 'v: vs' bereits in der normalen Form des schwachen Kopfes ist. – chi