関数型言語 Erlang

作成日 : 2008-04-13
最終更新日 :

関数型言語 Erlang

近くの図書館に、Erlang についれ書かれた本がある。 これをもとに、少しずつ Erlang のことを書く。 Erlang は「アーラン」と読む。

読んだ本

柏原 正三:Erlang 入門、 アスキー

これも図書館で借りてきた。 著者は内容を選んだという感じがあり、 関数型言語の基礎からゆっくり進んでいる。 並列プログラミングは最後に入口程度の紹介なので、 Erlang 固有の魅力を知りたい人には物足りないだろう。

並列計算には憧れがあり、 私もマルチスレッドに挑んでは挫折しているので、 この本を手がかりに、今度こそ並列処理を理解したいと思っている。 (2008-04-25)

インストール

成功例

私は 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

失敗例1

注意: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 から始めるということが後でわかったのだが、 そのせいなのかは不明。

失敗例2

ソースからのコンパイルも試みたが、 opensslのライブラリがないので、./configure から失敗してしまった。

本の補足と誤植

Linux の作業ディレクトリについて

p.18には、シェル起動時の作業ディレクトリの設定が記載されているが、 これは Windows の場合である。 Linux ではどうするか。ホームディレクトリにドットファイル .erlang というファイルを作り、 これに次の行を追加する。
c:cd("/work_directory").
Windows の場合は Erlang の実行ファイルのあるディレクトリ、 とあるので、注意する。

誤植

p.142 および p.143 のリスト 6-1 の実行例で、 foo が頻出するが、誤り。foo を sample61 に置き換えれば動作する。

Erlang の感想

Erlang は全体的に、Prolog に似ている。 当初、Prolog に並列処理機能をつけた処理系として開発されたということから、 類似性は当然ある。

内容 Erlang Prolog
シェルからの脱出 halt(). halt.

Vine 5.1 へのインストール

ソースからのインストールを試みたが、前と同じ問題が起きて異常終了した。

$ ./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
$

Vine 6.3 へのインストール

ソースからのインストールは問題なくできた。

$ erl
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V8.2  (abort with ^G)
1> X = 23.
23
2> % # ここで Ctrl-G をキーボードから入力する
User switch command
 --> q
$

2016-12-29

Windows (32 bit 版) で動かしてみる

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 版) で動かしてみる

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