2016-05-06 4 views
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 

答えて

3

ことはできフルパスを参照することにより、(Kernelに定義されている)は、オペレータへのパイプ、Kernel.==

iex(1)> 0 |> Kernel.==(0) 
true 
iex(2)> 1 |> Kernel.==(0) 
false 
関連する問題