Elmでちょっと嵌りまして、関数の定義でパターンマッチングは使えなかったんですね。コンパイラに怒られて、少し呆然としました。
[Cannot use pattern matching in function definition - elm-lang/elm-compiler] (https://github.com/elm-lang/elm-compiler/issues/973)
Haskellだと以下のように書けます。きれいですね。
factorial
factorial :: Int -> Int
factorial 0 = 1
factorial n = n * factorial (n - 1)
しかしElmだと以下のようになります。関数の定義で場合分けができないから、caseで分けます。ちょっとHaskellより見劣りします。
factorial
factorial : Int -> Int
factorial n =
case n of
0 ->
1
_ ->
n * factorial (n - 1)
Elixirで書くと以下のようになりますね。Haskellに似ています。と言うか、一般的にElixirはHaskell以上に関数定義でのパターンマッチングを推奨しているような気もしますが。
factorial
defmodule Fact do
def factorial(0), do: 1
def factorial(n) when n > 0 do
n * factorial(n - 1)
end
end
以上です