erlang
TRANSCRIPT
関数型言語の再入門
プログラミング 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]
まとめ
• 関数型は知っておいて損はない– この言語の素晴らしさに関して時間を割きまし
た
• この時点で混乱すると次が意味不明になる
• 次は関数型っぽいことをやってく予定です