1
私はエリクサーを学んでいます。私が自分自身に与えることを決めた練習の1つは、慣用的なエリクシルのクレジットカード検証のためにLuhn algorithmを書くことです。エリクシールに等価演算子の接頭辞/ポーランド記法がありますか?
私は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