Elixir Language
Funktionale Programmierung in Elixir
Suche…
Einführung
Versuchen wir, die grundlegenden Funktionen höherer Ordnung, wie z. B. Zuordnen und Reduzieren, mit Elixir zu implementieren
Karte
Map ist eine Funktion, die ein Array und eine Funktion übernimmt und ein Array zurückgibt, nachdem diese Funktion auf jedes Element in dieser Liste angewendet wurde
defmodule MyList do
def map([], _func) do
[]
end
def map([head | tail], func) do
[func.(head) | map(tail, func)]
end
end
Einfügen in iex
und Ausführen:
MyList.map [1,2,3], fn a -> a * 5 end
MyList.map [1,2,3], &(&1 * 5)
ist MyList.map [1,2,3], &(&1 * 5)
Reduzieren
Reduce ist eine Funktion, die ein Array, eine Funktion und einen Akkumulator benötigt und einen Akkumulator als Startwert verwendet, um die Iteration mit dem ersten Element zu starten, um den nächsten Akkumulator zu erhalten, und die Iteration wird für alle Elemente im Array fortgesetzt (siehe Beispiel unten).
defmodule MyList do
def reduce([], _func, acc) do
acc
end
def reduce([head | tail], func, acc) do
reduce(tail, func, func.(acc, head))
end
end
Kopieren Sie den obigen Ausschnitt in iex:
- Um alle Zahlen in einem Array
MyList.reduce [1,2,3,4], fn acc, element -> acc + element end, 0
:MyList.reduce [1,2,3,4], fn acc, element -> acc + element end, 0
- Um alle Zahlen in einem Array zu
MyList.reduce [1,2,3,4], fn acc, element -> acc * element end, 1
:MyList.reduce [1,2,3,4], fn acc, element -> acc * element end, 1
Erklärung für Beispiel 1:
Iteration 1 => acc = 0, element = 1 ==> 0 + 1 ===> 1 = next accumulator
Iteration 2 => acc = 1, element = 2 ==> 1 + 2 ===> 3 = next accumulator
Iteration 3 => acc = 3, element = 3 ==> 3 + 3 ===> 6 = next accumulator
Iteration 4 => acc = 6, element = 4 ==> 6 + 4 ===> 10 = next accumulator = result(as all elements are done)
Filtern Sie die Liste mit verkleinern
MyList.reduce [1,2,3,4], fn acc, element -> if rem(element,2) == 0 do acc else acc ++ [element] end end, []