Tracks
/
Gleam
Gleam
/
Übungen
/
Tracks on Tracks on Tracks
Tracks on Tracks on Tracks

Tracks on Tracks on Tracks

Lernübung

Einführung

Listen

Eine Liste in Gleam ist eine unveränderliche Sammlung von null oder mehr Werten. Alle Werte in einer Liste müssen denselben Typ haben. Da Listen unveränderlich sind, kann sich ihr Wert, sobald eine Liste erstellt wurde, nie mehr ändern. Alle Funktionen oder Operatoren, die eine Liste zu verändern scheinen (etwa das Hinzufügen eines Elements), geben in Wirklichkeit eine neue Liste zurück.

Listen kannst du so definieren:

let empty = []
let singleValue = [5]
let threeValues = ["a", "b", "c"]

Am häufigsten fügst du einer Liste ein Element mit der Spread-Syntax hinzu:

let two_to_four = [2, 3, 4]
let one_to_four = [1, ..two_to_four]
// -> [1, 2, 3, 4]

Das Modul gleam/list in der Gleam-Standardbibliothek enthält viele nützliche Funktionen für die Arbeit mit Listen. Dieses Modul wird im Gleam-Code sehr häufig verwendet, deshalb ist es gut, es zu kennen.

Listenmuster kannst du in case-Ausdrücken verwenden, um Listen abzugleichen und die enthaltenen Werte Variablen zuzuweisen:

pub fn describe(list: List(String)) -> String {
  case list {
    [] -> "Empty list"
    [x] -> "List with one item: " <> x
    [x, y] -> "List with two items: " <> x <> " and " <> y
    _ -> "List with three or more items"
  }
}

Neben dem Abgleich mit Listen exakter Länge kannst du die Spread-Syntax auch verwenden, um Listen abzugleichen, die mindestens eine bestimmte Länge haben:

pub fn describe(list: List(String)) -> String {
  case list {
    [_, _, ..] -> "List with at least two items"
    [_] -> "List with one item"
    [] -> "Empty list"
  }
}

Mit der Spread-Syntax kannst du außerdem den Rest der Liste einer Variablen zuweisen:

pub fn remove_first_item(list: List(String)) -> List(String) {
  case list {
    // Return the list without the first item
    [_, ..rest] -> rest

    // There's no first item to remove, return an empty list
    _ -> []
  }
}

case-Ausdrücke sollten ein Muster für jeden möglichen Wert des Typs haben, mit dem abgeglichen wird. Deshalb wird oft ein abschließendes Verwerfungsmuster (_) verwendet, um alle übrigen Werte abzudecken.

Anleitung

In dieser Übung schreibst du Code, um eine Liste von Programmiersprachen zu verwalten, die du auf Exercism lernen möchtest.

Du hast sechs Aufgaben, bei denen es jedes Mal um Listen geht.

1. Erstelle eine neue Liste

Um die Sprachen zu verwalten, die du lernen möchtest, brauchst du eine neue Liste. Definiere die Funktion new_list, die eine neue, leere Liste zurückgibt.

new_list()
// -> []

2. Definiere eine vorhandene Liste

Aktuell hast du einen Zettel, auf dem die Sprachen stehen, die du lernen möchtest: Gleam, Go und TypeScript. Definiere die Funktion existing_list, die diese Liste zurückgibt.

existing_list()
// -> ["Gleam", "Go", "TypeScript"]

3. Füge eine neue Sprache zu einer Liste hinzu

Wenn du Exercism erkundest und weitere interessante Sprachen findest, möchtest du sie zu deiner Liste hinzufügen. Implementiere die Funktion add_language, die eine neue Sprache am Anfang deiner Liste einfügt.

add_language(["OCaml", "Elixir"], "Scheme")
// -> ["Scheme", "OCaml", "Elixir"]

4. Zähle die Sprachen in der Liste

Die Sprachen einzeln zu zählen ist umständlich. Implementiere die Funktion count_languages, die die Anzahl der Sprachen in deiner Liste zählt.

count_languages(["jq", "Elm", "Rust", "Kotlin"])
// -> 4

5. Kehre die Liste um

Irgendwann fällt dir auf, dass deine Liste tatsächlich in umgekehrter Reihenfolge ist! Implementiere die Funktion reverse_list, die deine Liste umkehrt.

reverse_list(["Python", "Julia", "Idris", "COBOL"])
// -> ["COBOL", "Idris", "Julia", "Python"]

6. Prüfe, ob die Liste spannend ist

Du liebst zwar alle Sprachen, aber Gleam hat einen besonderen Platz in deinem Herzen. Deshalb bist du von einer Liste von Sprachen besonders begeistert, wenn:

  • Gleam an erster Stelle der Liste steht.
  • der zweite Eintrag der Liste Gleam ist und die Liste entweder zwei oder drei Sprachen enthält.

Implementiere die Funktion exciting_list, die prüft, ob eine Liste von Sprachen spannend ist:

exciting_list(["Lua", "Gleam"])
// -> True
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Gleam Exercism

Bereit, mit Tracks on Tracks on Tracks zu starten?

Melde dich bei Exercism an, um Gleam mit 33 Konzepte122 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.