Open3

Erlangスニペット集

kawarimidollkawarimidoll

Erlangやっていく

https://exercism.org/tracks/erlang/exercises

https://www.ymotongpoo.com/works/lyse-ja/index.html

文字列連結

++を使う

"Hello, " ++ Name ++ "!"

正規表現マッチ

re:run()を使う エスケープはダブルバックスラッシュにする必要がある
マッチオブジェクトが返ってくるのでnot nomatchと比較する

re:run("end with question?  ", "\\?\\s*$") /= nomatch

関数パターンマッチ

関数を丸ごとパターンマッチとして使える

leap_year(Year) when Year rem 4 == 0 andalso Year rem 100 > 0 -> true;
leap_year(Year) when Year rem 400 == 0 -> true;
leap_year(_) -> false.

https://exercism.org/tracks/erlang/exercises/leap

kawarimidollkawarimidoll

比較

if {condition} -> {then}; true -> {else} endをつかう

if
  Number rem 3 == 0 -> "Three";
  true -> "not three"
end

パターンマッチ

基本はcase ... of ...をつかう

steps(N) -> steps(N, 0).
steps(N, Acc) ->
    case N of
        1 -> Acc;
        N when N < 1 -> erlang:error(badarg);
        N when N rem 2 == 0 -> steps(N div 2, Acc + 1);
        _ -> steps(N * 3 + 1, Acc + 1)
    end.

https://exercism.org/tracks/erlang/exercises/collatz-conjecture

置換

キャプチャも使える
オプショナルでglobalを設定できる

re:replace("Hello world!", "(o)", "\\1oo", [global, {return, list}]),
kawarimidollkawarimidoll

reverse


reverse(Src, Dst) ->
    case Src of
        [] -> Dst;
        [Head | Tail] -> reverse(Tail, [Head | Dst])
    end.