1
我正在學習Elixir,我決定給自己的練習之一是嘗試編寫Luhn algorithm用於在慣用Elixir中進行信用卡驗證。Elixir中的等號運算符是否有前綴/波蘭語符號?
我意識到Elixir中的==
是一個內核函數,它顯然是由編譯器內聯的。是否有某種效用函數可以讓我做這樣的事情?
...
|> == 0
而不是必須定義一個函數來管道,就像我在這裏所做的那樣。
藥劑
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