Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?

プログラミングErlang - コンパイルと実行

5章あたり。

プログラムの実行方法

プログラムを3種類の方法で実行してみる

・hello.erl

-module(hello).
-export([start/0]).

start() ->
    io:format("Hello world-n").

・Erlangのshell上でコンパイルして実行する

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として実行する

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を起動すると、このファイルが読み込まれて、ファイルの中のコマンドがすべて評価される

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment