Einordnung

  • Interaktions: reine Funktions-/Methodendefinition
  • geschätzter Zeitwand:
    • Programmierneulinge: ca. 1 Stunde (eventuell länger)
    • Sprachneulinge: ca. 30 Minuten
    • Spracherfahrene: ca. 15 Minuten
  • Sprachempfehlung:
    • funktionale Sprachen

Aufgabe

Wenn wir mit Listen in unseren Sprachen programmieren sind wir es gewohnt, dass alles was wir so brauchen schon da ist, damit wir uns auf die größeren Probleme stürzen können. Lernen wir jedoch eine neue Sprache kennen ist es manchmal ganz gut sich mit den Bausteinen des Programmierens zu befassen. Listen (und ihre Brüder und Schwestern: Arrays, Maps usw.) spielen eine wichtige Rollen im alltäglichen Programmieren. In der Form eines Code-Katas werden wir nun also ein paar der grundlegenden Funktionen selbst implementieren.

Sei eine einfach verkettete Liste gegeben - es ist sprachabhängig wie man genau an solch eine Liste kommt - implementieren wir die folgenden Funktionen:

  • range(n) - liefert eine Liste zurück welche alle ganzen Zahlen (Integer) von 1 bis n (inklusive) enthält.
  • reverse_range(n) - liefert eine Liste zurück welche alle ganzen Zahlen (Integer) von n bis 1 (inklusive) enthält.
  • reverse(list) - liefert die Umkehrung der angegebenen Liste zurück.
  • map(list, fun) - liefert eine Liste zurück bei der die übergebene Funktion auf jedes Element der Liste angewandt und die Elemente mit dem Rückgabewert der Funktion ersetzt wurden.

Tip: Rekursion und die prepend-Operation auf einer Liste sollten euch etwas sagen.

Beispiele

Als Repräsentation einer Liste wird hier [] bzw. [1,2,3] gewählt. Je nach Programmiersprache können Listen aber auch anders dargestellt werden.

Beispiel: range

Beispiel 1
  • Aufruf: range(5)
  • Rückgabe: [1,2,3,4,5]
Beispiel 2
  • Aufruf: range(0)
  • Rückgabe: []

Beispiel: reverse_range

Beispiel 1
  • Aufruf: reverse_range(5)
  • Rückgabe: [5,4,3,2,1]

Beispiel: reverse

Beispiel 1
  • Aufruf: reverse([1,2,3])
  • Rückgabe: [3,2,1]

Beispiel: map

Beispiel 1
  • Funktion: (fun(el)) el + 1
  • Aufruf: map([1,2,3], fun)
  • Rückgabe: [2,3,4]
Beispiel 2
  • Funktion: (fun(el)) el * el
  • Aufruf: map([1,2,3], fun)
  • Rückgabe: [1,4,9]