関数型言語 Erlang |
作成日: 2008-04-13 最終更新日: |
近くの図書館に、柏原正三さんの「プログラミング言語 Erlang」がある。 これをもとに、少しずつ Erlang のことを書く。 Erlang は「アーラン」と読む。
私は Vine Linux 4.1 を使っているが、 このバージョンでは入っていない。また、apt にもない。 http://cean.process-one.net/download/ からダウンロードする。 CEAN Packaged Applications から、 Application はデフォルトを、running on は Linux Intel x86 を選ぶ。 cean-otp_R11B_linux-x86.tar.gz がダウンロードされる。 これを tar zxvf cean-otp_R11B_linux-x86.tar.gz で解凍し、 配下に作られる bin ディレクトリに PATH を切って erl は OK。
erlc は、オリジナルのシンボリックリンクの位置がおかしい。
erlc -> ../erlang/erts-5.5.5/linux-x86/erlc
となっているが、これを次のように直す。
erlc -> ../erlang/erts-5.5.5/linux-x86/bin/erlc
注意:CEAN Base System を選ぶと、うまくいかない。以下失敗談。 running on のところでは、Linux Intel x86 を選ぶ。 ダウンロードすると、cean_installer.bin というファイルが得られる。 これに対して、sh cean_installer.bin とすると、 カレントディレクトリに対して cean というディレクトリが作られる。 cean ディレクトリに降りて、start.sh を実行すると、 インタープリターが起動される。
しかし、このerlでは、ファイルを読んでくれない。 myfunc.erlというファイルをカレントディレクトリに作って読み込ませても、 エラーが出るだけ。
-module(myfunc).
=ERROR REPORT==== 13-Apr-2008::16:17:47 ===
Error in process <0.31.0> with exit value: {undef,[{compile,file,[myfunc,[report_errors,report_warnings]]},{c,c,2},{erl_eval,do_apply,5},{shell,exprs,6},{shell,eval_loop,3}]}
** exited: {undef,[{compile,file,[myfunc,[report_errors,report_warnings]]},
{c,c,2},
{erl_eval,do_apply,5},
{shell,exprs,6},
{shell,eval_loop,3}]} **
start.sh から始めるのではなく、 erl から始めるということが後でわかったのだが、 そのせいなのかは不明。
ソースからのコンパイルも試みたが、 opensslのライブラリがないので、./configure から失敗してしまった。
p.18には、シェル起動時の作業ディレクトリの設定が記載されているが、
これは Windows の場合である。
Linux ではどうするか。ホームディレクトリにドットファイル
.erlang というファイルを作り、
これに次の行を追加する。
c:cd("/work_directory").
Windows の場合は Erlang の実行ファイルのあるディレクトリ、
とあるので、注意する。
p.142 および p.143 のリスト 6-1 の実行例で、 foo が頻出するが、誤り。foo を sample61 に置き換えれば動作する。
Erlang は全体的に、Prolog に似ている。 当初、Prolog に並列処理機能をつけた処理系として開発されたということから、 類似性は当然ある。
| 内容 | Erlang | Prolog |
|---|---|---|
| シェルからの脱出 | halt(). | halt. |
ソースからのインストールを試みたが、前と同じ問題が起きて異常終了した。
$ ./configure
(中略)
*********************************************************************
********************** APPLICATIONS DISABLED **********************
*********************************************************************
crypto : No usable OpenSSL found
odbc : ODBC library - link check failed
ssh : No usable OpenSSL found
ssl : No usable OpenSSL found
*********************************************************************
*********************************************************************
********************** APPLICATIONS INFORMATION *******************
*********************************************************************
wx : wxWidgets not found, wx will NOT be usable
*********************************************************************
*********************************************************************
********************** DOCUMENTATION INFORMATION ******************
*********************************************************************
documentation :
fop is missing.
The documentation can not be built.
*********************************************************************
なんと同じように失敗してしまった。openssl そのものは入っているので、 ライブラリが必要だ、ということらしい。
# apt-cache search openssl
(中略)
# apt-get install openssl-devel
(中略)
# exit
$ ./configure
*********************************************************************
********************** APPLICATIONS DISABLED **********************
*********************************************************************
odbc : ODBC library - link check failed
*********************************************************************
*********************************************************************
********************** APPLICATIONS INFORMATION *******************
*********************************************************************
wx : wxWidgets not found, wx will NOT be usable
*********************************************************************
*********************************************************************
********************** DOCUMENTATION INFORMATION ******************
*********************************************************************
documentation :
fop is missing.
The documentation can not be built.
そこで「ない」といわれたモジュールをインストールすることにした。
# apt-get install unixODBC-devel
OpenSSL 関係は OK とする。
次に、wx-gtk2 だ。これは既に入っているのに先のエラーが出る。 なぜこのようなエラーが出たかはわからない。 もし問題があればそのときに修正しよう。
最後に fop is missing をどう扱うべきか悩んだ。fop はドキュメントを PDF 化するのに必要なだけで、 特に本体には影響はないらしい。それならば無視していいだろう。
$ make
コンパイルではいろいろな警告がでてくるが、これらにつきあっている暇はない。
$ sudo make install
これで、/usr/local/bin に erl が入った。 以下は、Erlang の起動と終了である。
$ erl Erlang R13B04 (erts-5.7.5) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false] Eshell V5.7.5 (abort with ^G) 1> X = 23. 23 2> % ここで Ctrl-G をキーボードから入力する User switch command --> q $
Erlang は並行処理が得意である。Linux 版では複数 CPU の恩恵が受けられるのだが、Windows ではそうではないようだ。 それでも、動かしてみよう。
ダウンロードのページ(www.erlang.org) から、Windows Binary File をダウンロードする。 90 MB ある。
次にインストールを開始する。注意すべきは、途中で、Microsoft の C++ Runtime Library をインストールするか聞かれること。こちらも OK でよい。
インストールは問題なく完了する。あとは、スタート→すべてのプログラム→Erlang OTP RxxByy (xx や yy はバージョン番号が入る)。
Windows の 64 bit 版で動かしてみた。上と同じように動作する。
http://www.kmonos.net/alang/etc/erlang.php の例題にならって確かめてみた。
5> math:sin(1.57). 0.9999996829318346例題では 1.000000 が表示されることになっている。おそらく、有効数字の既定値が違うのだろう。
1> X = 20. 20 2> X = 10. ** exception error: no match of right hand side value 10エラーメッセージが異なる。
まりんきょ学問所 > 関数型言語手習い > 関数型言語 Erlang
MARUYAMA Satosi