Erlang勉強会#1
Erlang勉強会#1へ行ってきた。
その時のメモ。
【1】Erlangとは?
ErlangのWikipediaには次の説明がある。
Erlang(アーラン) は、コンピュータにおいて汎用的な用途に使うことができる並列処理指向のプログラミング言語および実行環境である。 Erlangの直列処理のサブセットの言語は、関数型言語であり、先行評価を行い、変数への代入は1回限りであり、動的型付けである。 Erlangはエリクソン社により次の条件のシステムを構築できるよう設計された。分散化された環境
障害に耐性をもつ (フォルトトレラント)
ある程度のリアルタイム性を備える
無停止で稼働する
最近、静かに流行している言語。
【2】開発環境のインストールとサンプルソース実行
ここのBlogに詳しい。
「Erlang (BEAM) emulator」を起動できれば成功。
Rubyのirbに似ている。
参考書は、英語の本がある。
そこから、日本語のベータ版がPDFで落とせるらしい。
その日本語のPDFの内容が素晴らしい!
関数型言語、論理型言語の意味がようやく分かったような気がする。
サンプルソースとして「ピタゴラス数を計算する」を実行してみた。
-module(pythag).
-export([pythag/1]).
%% ピタゴラス数を計算する
pythag(N) ->
[{A,B,C} ||
A <- lists:seq(1,N),
B <- lists:seq(1,N),
C <- lists:seq(1,N),
A+B+C =< N,
A
A*A+B*B =:= C*C
].
実行ログは下記の通り。
c(pythag).
pythag:pythag(16).
↓
[{3,4,5}]
ソースを見て分かるように、「何がしたいか?」を書くだけで「どのように書くか?」は気にしない。
【3】「=」は代入演算子ではなく、パターンマッチング(評価する)
関数型言語では、単一代入変数という言葉が良く出る。
つまり、変数は1回しか代入できない。
そして、「=」は代入演算子ではなく、パターンマッチング。
この点が、CやJavaなどの手続き型言語に慣れた僕たちを戸惑わせる。
つまり、LHS=RHSとは、「右辺値を評価して、その結果を左辺値のパターンにマッチさせる」。
これは、評価しているのと同じ。
実際に実行してみる。
X=(2+4).
X=6.
→正常
X=10.
→エラー
Y=6.
X=Y.
→正常
「=」は評価しているということ。
Xへ1回目に代入する時は、必ず真。
2回目に代入する時は、値が同じ場合のみ、成功する。
この事実は、変数Xがプログラミング言語の変数ではなく、数学で使う変数に似ている。
つまり、X=X+1が使えない!!
パターンマッチングの概念は、関数型言語だけでなく、Perlにも出てくる。
この発想があるからこそ、正規表現が使える。
色んな言語を知ることは、「現実をモデル化する技術」を一つ増やしてくれる。
それが楽しい。
| 固定リンク
「プログラミング」カテゴリの記事
- Javaのモジュールシステムの考え方をまとめてみた(2022.10.21)
- Javaのモジュールシステムは複雑性をより増している(2022.09.10)
- Javaはなぜ関数型言語になろうとしているのか(2022.09.02)
- Javaのラムダ式の考え方(2022.08.10)
- Javaはオブジェクト指向言語ではなく関数型言語だった~「[増補改訂]関数プログラミング実践入門」はお勧めの本だ(2022.08.06)
コメント