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.
脚註
[編集]
外部リンク
[編集]- 公式サイト — https://www.erlang.org/