Tracks
/
Gleam
Gleam
/
Übungen
/
Geheimnisse
Geheimnisse

Geheimnisse

Lernübung

Einführung

Anonyme Funktionen

Gleam hat Funktionen als Werte erster Klasse. Das bedeutet, dass Funktionen normale Werte sind: Du kannst sie Variablen zuweisen, als Argumente übergeben und aus anderen Funktionen zurückgeben.

Eine benannte Funktion, die in einem Modul definiert ist, kannst du über ihren Namen referenzieren.

pub fn main() {
  // Assign the function to a variable
  let f = add_one
  
  // Invoke the function
  f(1) // -> 2
  f(2) // -> 3
}

fn add_one(x) {
  x + 1
}

Gleam kennt außerdem anonyme Funktionen, die du innerhalb anderer Funktionen definierst.

// Define the function
let f = fn(x) { x + 1 }

// Invoke the function
f(1) // -> 2
f(2) // -> 3

Den Typ einer Funktion schreibst du mit einer ähnlichen Syntax wie anonyme Funktionen. Der Typ einer Funktion, die einen Int und einen Float entgegennimmt und einen Int zurückgibt, sieht so aus:

fn(Int, Float) -> Int

Anonyme Funktionen können auf Variablen zugreifen, die sich beim Definieren im Gültigkeitsbereich befanden. Dadurch sind sie Closures.

let secret_number = 42

// This function always returns 42
fn() { secret_number }

Die Syntax der Function Capture bietet eine praktische Kurzschreibweise, um anonyme Funktionen zu erstellen, die ein einzelnes Argument an eine Funktion übergeben. Diese beiden Ausdrücke sind äquivalent:

// Anonymous function syntax
let f = fn(x) { my_function(1, 2, x) }

// Function capture syntax
let f = my_function(1, 2, _)

Anleitung

In dieser Übung sollst du die Software für ein Verschlüsselungsgerät schreiben, das Daten durch Transformationen verändert. Du brauchst eine Möglichkeit, komplizierte Funktionen flexibel zu erstellen, indem du einfachere Funktionen kombinierst.

Gib für jede Aufgabe eine anonyme Funktion zurück, die aus dem aufrufenden Gültigkeitsbereich heraus aufgerufen werden kann.

1. Erstelle einen Addierer

Implementiere secret_add. Die Funktion sollte eine Funktion zurückgeben, die ein Argument entgegennimmt und zu diesem das Argument addiert, das an secret_add übergeben wurde.

let adder = secret_add(2)
adder(2)
// -> 4

2. Erstelle einen Subtrahierer

Implementiere secret_subtract. Die Funktion sollte eine Funktion zurückgeben, die ein Argument entgegennimmt und den geheimen Wert, der an secret_subtract übergeben wurde, von diesem Argument subtrahiert.

let subtractor = secret_subtract(2)
subtractor(3)
// -> 1

3. Erstelle einen Multiplizierer

Implementiere secret_multiply. Die Funktion sollte eine Funktion zurückgeben, die ein Argument entgegennimmt und dieses Argument mit dem geheimen Wert multipliziert, der an secret_multiply übergeben wurde.

let multiplier = secret_multiply(7)
multiplier(3)
// -> 21

4. Erstelle einen Dividierer

Implementiere secret_divide. Die Funktion sollte eine Funktion zurückgeben, die ein Argument entgegennimmt und dieses Argument durch den geheimen Wert dividiert, der an secret_divide übergeben wurde.

let divider = secret_divide(3)
divider(32)
// -> 10

5. Erstelle einen Funktionskombinierer

Implementiere secret_combine. Die Funktion sollte eine Funktion zurückgeben, die ein Argument entgegennimmt und auf dieses Argument der Reihe nach die beiden Funktionen anwendet, die an secret_combine übergeben wurden.

let multiply = secret_multiply(7)
let divide = secret_divide(3)
let combined = secret_combine(multiply, divide)

combined(6)
// -> 14
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Gleam Exercism

Bereit, mit Geheimnisse zu starten?

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