関数型言語の再入門
プログラミング Erlang
@cev_cs
本間皇成
前準備
Erlang プログラミングをやってみたい方
http://www.erlang.org/download.html
その後環境変数でbinのパス
OR
apt-get install erlang
本日の予定
• Erlang 概要
• 関数型プログラミング
Erlang との出会い
Maz 氏の日記より
“ 次にくるトレンドは「並列」と「関数型」
両方を押さえた Erlang が本命 ”
ちょっと調べてみると・・
Twitter の内部にも Erlang が使われている!
既に実用化されている点からも、
勉強会でちょっと触ってみたい!
Erlang との出会い
Erlang の何がすごいのか?
並列処理の機能を念頭に置いて
設計されている!
並列処理の重要性
• 処理能力の向上
• 対障害アプリケーション
• スケーラビリティ
Erlang の並列処理
Erlang にはロックや同期メソッドがない!
↓
わずらわしい排他制御を考えなくてすむ
スレッド1 スレッド2
共有メモリ
5
1足して!
3足して!
6 8
6!? 8!?
ロックして共有メモリを変更できないようにしなきゃ・・
本来考えるべきこと
Erlang なら
こんなこと考える必要がない!
↓
関数型言語の特徴を
うまく利用しているため
ですが、今回は並列・分散プログラミングは扱いません。
関数型プログラミングとしての Erlang の説明です。
関数型言語
私たちの学科では Prolog を勉強しました
その他 Lisp , Schema , Haskell , F# , Scala
利点?
http://www.sampou.org/haskell/article/whyfp.html
関数型プログラミング
変数の違い
単一代入変数であることに注意!
大文字から始める
=はパターン照合処理
アトム
• 小文字から始まる
• アトムの値はアトムそのもの
タプル
• 各変数を1つにまとめたい時に使用
• C の構造体と目的は同じだが、型宣言は無し
P = { point , 45 , 30 }. % 代入
{ point , X , _ } = P. % 評価 _は無名変数
X . % -> 45
リスト
入れるものの個数が決まってない場合に使用
[ 1, 2, 3, 4, 5, 6 ]
[ H | T ] で表現
[ H | T ] = L
リストのヘッドを H に取り出し、
テイルを T に取り出す
ヘッド テール
確認!
• 次の式は成り立つでしょうか?
{ 123 , abc } = { X , abc }.
成功! X |-> 123
{ X, Y } = { 333, ghi, 12}.
失敗 タプルの形が異なる
{ X, Y, X} = { { abc, 12 } , 40, { abc, 12 } }.
成功! X|-> { abc,12 } , Y |-> 40
[ A, B , C | T ] = [ a, b, c, d, e ]
成功! A|-> a , B|-> b, C|-> c, T|->[d,e]
まとめ
• 関数型は知っておいて損はない
– この言語の素晴らしさに関して時間を割きました
• この時点で混乱すると次が意味不明になる
• 次は関数型っぽいことをやってく予定です

Erlang

Editor's Notes

  • #9 一方のスレッドがリソースの状態を変更したせいで、他方のスレッドで処理結果がおかしくなってしまう
  • #11 変数が単一代入変数である点などから
  • #15 基本的にはアトムを用いる 興味の無い変数は無名関数として_で表現する。