Endrekursion
Maximale Aufruftiefe
Teste deine Funktion mit einem Aufruf wie diesem:
map (\x -> x * 2) (List.range 1 100000)
Aufgabe 1
Bisherige Ergebnisse weiterreichen
Das oben auftretende Problem kannst du in Elm und ähnlichen Sprachen umgehen,
indem du die Funktion so programmierst, dass sie die bisher errechneten
Ergebnisse weiterreicht.
Wir benötigen also einen zusätzlichen Parameter, den man häufig acc
(für Akkumulator) nennt.
Dieser Parameter soll die bisher errechneten Ergebnisse enthalten, also akkumulieren.
Aufgabe 2
Mache dir die Idee der Weiterreichung von Ergebnissen in einem Rollenspiel klar. Stellt euch dazu in einer Reihe auf. Jede Person stellt einen Funktionsaufruf dar. Überlegt euch wie ihr eine Liste von Zahlen verarbeiten könnt, so dass jeder nur die erste Zahl der Liste verarbeitet und das Ergebnis in einer Form weiterreicht, so dass die nächste Person damit weiterarbeiten kann und das Ergebnis am Ende der Reihe die vollständige verarbeitete Liste enthält. Ihr könnt die Ergebnisse zum Beispiel auf einem Zettel notieren, den ihr weitergebt. Wie viele unterschiedliche Informationen müssen auf diesem Zettel notiert werden, damit die nächste Person damit weiterarbeiten kann?
Aufgabe 3
Schreibe eine Funktion mapEndrek mit einem zusätzlichen Parameter
acc, die die Idee der Weiterreichung von Ergebnissen umsetzt.