Zoeken…


Invoering

Laten we proberen de basisfuncties van hogere orders zoals map te implementeren en te verminderen met behulp van Elixir

Kaart

Map is een functie die een array en een functie gebruikt en een array retourneert na het toepassen van die functie op elk element in die lijst

defmodule MyList do
  def map([], _func) do
    []
  end

  def map([head | tail], func) do
    [func.(head) | map(tail, func)]
  end
end

Kopieer en plak in iex en voer uit:

MyList.map [1,2,3], fn a -> a * 5 end

De MyList.map [1,2,3], &(&1 * 5) syntaxis is MyList.map [1,2,3], &(&1 * 5)

Verminderen

Verkleinen is een functie die een array, functie en accumulator gebruikt en accumulator als seed gebruikt om de iteratie met het eerste element te starten om de volgende accumulator te geven en de iteratie gaat door voor alle elementen in de array (zie onderstaand voorbeeld)

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

Kopieer en plak het bovenstaande fragment in iex:

  1. Alle getallen in een array toevoegen: MyList.reduce [1,2,3,4], fn acc, element -> acc + element end, 0
  2. Om alle getallen in een array opnieuw samen te 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

Uitleg bijvoorbeeld 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)

Filter de lijst met verkleinen

MyList.reduce [1,2,3,4], fn acc, element -> if rem(element,2) == 0 do acc else acc ++ [element] end end, []


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow