5章あたり。
プログラムを3種類の方法で実行してみる
・hello.erl
-module(hello).
-export([start/0]).
start() ->
io:format("Hello world-n").
1> c(hello).
{ok,hello}
2> hello:start(.)
Hello world-n
erlc hello.erl
erl -noshell -s hello start -s init stop
Hello world-n
-noshell
:
対話型シェルなしでErlang を起動する(システムを起動したときにいつも表示されるErlang の「バナー」は表示されない)。
-s hello start
:
関数hello:start() を実行する。
※ -s Mod ... オプションを使う場合、Mod は先にコンパイルしておかなければならない。
-s init stop
:
apply(hello, start, []) が完了すると、システムは関数init:stop() を評価する。
escriptを使えば、プログラムをスクリプトとして直接実行できる。
プログラムをコンパイルする必要はない。(実行権限を付けるだけ)
関数の名前がmainであることに特に意味はなく名前は何でもよい。
大事なのは、関数名とコマンドラインで指定する名前が一致すること
・hell(escript)
#!/usr/bin/env escript
main(_) ->
io:format("Hello world\n").
・shell
$ ./hello
Hello world
・factorial(escript)
#!/usr/bin/env escript
main([A]) ->
I = list_to_integer(A),
F = fac(I),
io:format("factorial ~w = ~w~n",[I, F]).
fac(0) -> 1;
fac(N) -> N * fac(N-1).
・shell
$ ./factorial 25
factorial 25 = 15511210043330985984000000
現在設定中のロードパスを取得
code:get_path()
新しいディレクトリをロードパスの先頭に追加する
@spec code:add_patha(Dir) => true | {error, bad_directory}
新しいディレクトリをロードパスの終端に追加する
@spec code:add_pathz(Dir) => true | {error, bad_directory}
ロードするPathは、ホームディレクトリの.erlangというファイルの中に書いておく習わしになっている
.erlangは、どんなErlangコードも書いておけ
Erlangを起動すると、このファイルが読み込まれて、ファイルの中のコマンドがすべて評価される