Ich lerne Elixir, und eine der Übungen, die ich mir selbst geben möchte, ist zu versuchen, die Luhn algorithm für die Kreditkartenvalidierung in idiomatischen Elixir schreiben.Gibt es in Elixir eine Vorsilbe/polnische Schreibweise für den Gleichheitsoperator?
Ich realisiere, dass ==
in Elixir ist eine Kernel-Funktion, die offenbar durch den Compiler inlined sind. Gibt es eine Art Utility-Funktion, mit der ich so etwas machen kann?
...
|> == 0
statt mit einer Funktion zum Rohr in definieren, wie ich hier getan habe.
Elixir
defmodule Luhn do
def equalzero?(x) x == 0 end
def validate(num) do
digits = Integer.digits(num)
len = length digits
digits
|> Stream.with_index
|> Enum.reverse
|> Enum.reduce(0, fn {digit, index}, acc ->
if rem(len - index, 2) == 0 do
acc + digit * 2 |> Integer.digits |> Enum.sum
else
acc + digit
end
end)
|> rem(10)
|> Luhn.equalzero?
end
end