Tracks
/
Elixir
Elixir
/
Übungen
/
Lucas-Zahlen
Lucas-Zahlen

Lucas-Zahlen

Lernübung

Einführung

Streams

Alle Funktionen im Enum-Modul sind eager. Wenn du mit dem Enum-Modul mehrere Operationen auf Enumerables ausführst, erzeugt jede Operation ein Zwischenergebnis.

Das Stream-Modul ist eine lazy Alternative zum eager Enum-Modul. Es bietet viele der gleichen Funktionen wie Enum, aber statt Zwischenergebnisse zu erzeugen, baut es eine Reihe von Berechnungen auf, die erst ausgeführt werden, wenn der Stream an eine Funktion aus dem Enum-Modul übergeben wird.

Streams implementieren das Enumerable-Protokoll und sind kombinierbar. Du kannst sie verketten, um komplexere Funktionalität zu erstellen.

Anleitung

Du bist ein großer Fan des Numberphile-YouTube-Kanals und hast gerade ein cooles Video über die Lucas-Folge gesehen. Du möchtest diese Folge mit Elixir erzeugen.

Beim Entwurf deiner Funktion möchtest du Lazy Evaluation nutzen, damit du so viele Zahlen erzeugen kannst, wie du willst, aber nur, wenn du sie wirklich brauchst. Also entscheidest du dich für einen Stream.

1. Ungültige Argumente abfangen

Füge eine Guard-Klausel hinzu, die einen Fehler auslöst, wenn die Folge mit etwas anderem als einer Ganzzahl oder mit einer Ganzzahl kleiner als 1 erzeugt wird. Wenn du das als ersten Schritt erledigst, vermeidest du Fehler durch unendliche Rekursion in späteren Schritten.

LucasNumbers.generate("Hello World")
# => ** (ArgumentError) count must be specified as an integer >= 1

2. Die Basisfälle erzeugen

Du weißt, dass die Folge zwei Startzahlen hat, die nicht derselben Regel folgen. Schreibe zwei Klauseln für die Basisfälle, die diese Zahlen zurückgeben:

LucasNumbers.generate(1)
# => [2]

LucasNumbers.generate(2)
# => [2, 1]

3. Den verallgemeinerten Fall erstellen

Bei jeder Folge, die länger als 2 ist, weißt du, dass du die beiden vorherigen Zahlen addieren musst, um die nächste Zahl zu erhalten, und so weiter. Schreibe den verallgemeinerten Fall.

LucasNumbers.generate(3)
# => [2, 1, 3]

LucasNumbers.generate(4)
# => [2, 1, 3, 4]
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Elixir Exercism

Bereit, mit Lucas-Zahlen zu starten?

Melde dich bei Exercism an, um Elixir mit 58 Konzepte168 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.