てきとうなメモ

本の感想とか技術メモとか

関数定義

こんな感じ.

-module(foo).
-export([fac/1, fib/1]).

fac(0) ->
    1;
fac(X) ->
    X * fac(X - 1).

fib(1) -> 1;
fib(2) -> 1;
fib(X) ->
    fib(X-1) + fib(X-2).

erlangもハイライトしてくれるんだなあ.

-module(XXX).

でモジュール名を宣言.

-export([func/arity])

で外部に公開する関数名と引数の数をリストで指定する.

関数定義自体は

func(arg, ...) -> body1;
...
func(arg, ...) -> bodyn.

と ->を使って定義する.パターンマッチが複数あるときは;(セミコロン)を用いる.関数定義の最後は.(ピリオド).

Haskellでは=で関数定義しているけども,Erlangでは=は代入に使うことができる.一度だけだけれども.あと,fac(x) -> ...とかはだめで,変数名は大文字かアンダースコア(_)で始まらなければならない.小文字で始まるとatomになってしまうので.この辺はprologっぽい.

erlから使うときはc(filename)でコンパイルする.

1> c(foo).
{ok,foo}

で,module:funcで関数を指定する.

2> foo:fac(5).
120
3> foo:fib(10).
55
4>