s n h m r u
i

Endrekursion

Maximale Aufruftiefe

Teste deine Funktion mit einem Aufruf wie diesem:

map (\x -> x * 2) (List.range 1 100000)

Aufgabe 1

Was passiert, wenn du diesen Code ausführst? Erkläre, warum das so ist.

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.

Suche

v
8.2.2.10.3.3 Endrekursion
Kopieren durch Anklicken

Rückmeldung geben