コンテンツにスキップ

Erlang

出典: フリー教科書『ウィキブックス(Wikibooks)』
Wikipedia
Wikipedia
ウィキペディアErlangの記事があります。

Erlangフォールトトレラント分散処理リアルタイム処理に適した、汎用並列指向関数型プログラミング言語です。強力な動的型付け、軽量な並列処理、先行評価、Prologのようなパターンマッチを特徴としています。Erlangは1980年代にEricsson Computer Science Laboratoryで開発され、当時満たされていなかった電気通信プログラミングのニーズを満たしました。

Erlangのルーツは電気通信ですが、そのユニークな機能と豊富なライブラリーにより、汎用プログラミング言語として適しており、ネットワークサーバー、制御システム、Web開発などのプログラミングプロジェクトによく適しています。

Erlang言語は、アプリケーションやモジュールの豊富なライブラリ、仮想マシンやオペレーティングシステム、標準的な動作を確立する設計原則のセットとともに、Erlang/OTP(Open Telecommunications Platform)を構成しています。Erlang/OTPはフリーソフトウェア(Apache Public License)として配布されており、Ericssonから商業的にサポートされたバージョンもあります。どちらのディストリビューションもMicrosoft Windows、Wind RiverのVxWorks、および多くの種類のUnixで動作します。

ビルド済みバイナリーパッケージ

[編集]

ほとんどの OS のパッケージマネージャーは、ビルド済みのバイナリーパッケージを提供しています。

Microsoft Windows の Winget
winget install "Erlang OTP"
macOS の Homebrew
brew install erlang
macOS の MacPorts
port install erlang
FreeBSD の Ports
pkg install erlang
GNU/Linuxのディストリビューション
Ubuntu や Debian
apt-get install erlang
Fedora
yum install erlang

Hello world

[編集]
hello.erl
-module(main).
-export([main/1]).
%% My first Erlang code

main([_]) ->
    io:format("Hello world!"),
init:stop() .

文法概要

[編集]

Erlangは関数型プログラミング言語で、以下のような基本的な文法があります。

変数

[編集]

Erlangでは、変数は小文字で始まります。変数には再代入ができず、一度値を束縛すると変更できません。

変数の例
X = 10.
Y = X + 5.

アトム

[編集]

Erlangのアトムは、名前のあるユニークな不変値です。アトムは、小文字で始まり、英数字、アンダースコア(_)、アットマーク(@)で構成されます。また、シングルクォーテーション(')で囲むことで大文字で始まるアトムや英数字以外の文字も使うことができます。 アトムは値はアトムそのものです。

リスト

[編集]

Erlangのリストは、角かっこで囲まれたカンマ区切りの値のシーケンスです。リストは動的に長さを変更できます。

リストの例
[1, 2, 3]. 
[1 | [2, 3, 4]].

タプル

[編集]

タプルは、中括弧で囲まれたカンマ区切りの値のシーケンスです。タプルは静的で不変であり、フィールドは整数のインデックスでアクセスされます。

タプルの例
{1, 2, 3}. 
{atom1, "hello", [1, 2, 3]}.

関数

[編集]

Erlangでは、funキーワードを使用して無名関数を定義できます。また、関数の定義には、パターンマッチングを使用することができます。

関数定義の例
double(X) -> X * 2.

制御構造

[編集]

Erlangには、条件文、ループ、および例外処理のための制御構造があります。

if文
if
  X > 0 ->
    positive;
  X < 0 ->
    negative;
  true ->
    zero
end.
case文
case X of
  0 -> zero;
  1 -> one;
  _ -> other
end.
パターンマッチングを使用した関数
is_even(X) when X rem 2 == 0 -> true;
is_even(_) -> false.
ループ
loop(X) ->
  if X > 10 ->
       done;
     true ->
       io:format("X is ~p~n", [X]),
       loop(X+1)
  end.
例外処理
try
  1 / 0
catch
  error:Arithmetic -> io:format("division by zero")
end.

脚註

[編集]


外部リンク

[編集]