erlangのお勉強。

  • Erlangにおける符号" = "は代入を意味するのではなく、パターン照合処理を行っている
    • Erlangでは変数の代入はできない。未束縛変数を「=」で右辺と等しくするという意味での代入は可能。つまり、単一代入。
  • 変数は大文字
  • Atom(文字列)は小文字で。ただし、シングルクォートでくくれば小文字もok
  • タプル、リストが使用可能。使い方は他のスクリプト言語と同じ。
  • モジュールと関数

 -module(mymath).
 -export([add/2, multi/2]).
 add(X,Y) ->
 X + Y.

 multi(X,Y) ->
 X * Y.

    • 最初の2行でこのmoduleをdeclareしている
      • export([func名/変数の数]).という形で記述し、それ以下にそれぞれの関数についてdefする
    • 関数の引数パターンマッチ
      • C,javaのように関数をオーバーロードするのではなく、ただ同名同アリティの節を以下のように並べていく。ここで注意すべきなので、途中の節の終わりには「;」を使い、節の終わりに「.」を使う。

area(circle,X) ->
X * X * 3.14;
area(square,X) ->
X * X;
area(Other,X) ->
io:format("~p is not supported~n",[Other]),
X.

    • module名に指定したファイル名「mymath.erl」で保存して、emacsではc-c,c-kでコンパイルできる。
    • コンパイルしたものは、mymath:add(3,5).などのようにして利用出来る。
  • ガード
    • パターンマッチで解決できないものをガードに記述する
    • 形式は「パターン1 ガード1 -> ...」という形で、ガードの論理積は「,」、論理和は「;」で表現する

bigger(X , Y) when X > Y ->
X;
bigger(X , Y) when X < Y ->
Y;
bigger(X , _Y) ->
io:format("same~n",[]),
X.