Erlangを触ってみた
-
Upload
yoichi-toyota -
Category
Documents
-
view
416 -
download
2
Transcript of Erlangを触ってみた
株式会社エクストーン 下っ端 豊田陽一
! プログラミング言語Erlang ◦ 概要 " 何が出来るのか " 何故やるのか " 誰がやってるのか ◦ Erlangを触ってみる
! Erlang ◦ エリクソン社によって設計された汎用的なプログラミング言語 " 関数型言語 " 分散環境 " 耐障害性 " リアルタイム性 ◦ 名前の由来 " 数学者Agner Krarup Erlangから " Ericsson languageの略とも言われる
! 同時並行性 ◦ アクターモデルによる実現 ◦ スケールアウトも容易 " コア数に応じて性能も上がる
" …のはタスクの内容次第 " キューイングとかMapReduceとか、そういうのはちょお得意
" 複数台でも動作させられる ! 参照透過性 ◦ 常に同じパラメータの関数は同じ結果を返す " 変数の上書きが出来ない ◦ 実用主義的に、それを破る方法もある " 今日の日付を返すtoday()関数とかも作れる
! 分散並列処理したい! ! 関数型言語触りたい! ! Web業界の流行から(比較的)遠いところの技術身につけたい!
! IntelliJ IDEAにプラグインがあった!
! ドワンゴがやってた ◦ 思いっきりWeb業界の流行だった! ◦ 2/19にドワンゴで勉強会あるよ " http://connpass.com/event/4711/ " ニコ生中継もやるっぽい " 参加者既に定員越え
" 滅茶苦茶流行ってた
$ erl Erlang R14B04 (erts-5.8.5) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [kernel-poll:false]
Eshell V5.8.5 (abort with ^G) 1>
! OK、起動した。 ◦ 起動しない人はaptとかyumとかで適当に入れて下さい…
! +, -, *, / ◦ 四則演算はまあ見たまんま ◦ /は返り値として浮動小数返す ◦ C的な/はかわりにdivを使う ◦ %はrem
1> 5 / 2. 2.5 2> 5 div 2. 2 3> 5 rem 2. 1
! 大文字もしくは_で始まる ◦ 小文字で始まる変数は作れない ◦ 変数の値を書き換えることが出来ない ◦ _だけの変数は値を保持しない
1> Hoge = 'Hoge‘. 'Hoge' 2> Hoge. 'Hoge' 3> Hoge = 'Fuga'. ** exception error: no match of right hand side value 'Fuga' 4> Hoge = 'Hoge'. 'Hoge'
! 複数のデータの集合 ◦ {Element1, Element2, … ElementN} ◦ 項の数があらかじめ分かっている場合に利用
5> Point = {4,6}. {4,6} 6> { X, _ } = Point. {4,6} 7> X. 4
! 何でも保持できる ◦ [Element1, Element2, … ElementN]
8> [1, 2, 3, Point, 4, 5]. [1,2,3,{4,6},4,5] 9> [97, 98, 99]. "abc“
◦ 文字列=数値のリスト " かなり微妙くさい
! 結合・削除 ◦ ++, -- ◦ hd, tl ◦ |
10> List = [1, 2, 3]. [1,2,3] 11> List ++ [4, 5]. [1,2,3,4,5] 15> List -- [1, 3]. [2] 16> [1, 2, 3] -- [1, 2] -- [1]. [1,3] 17> hd([1, 2, 3, 4]). 1 18> tl([1, 2, 3, 4]). [2,3,4] 19> [hd([1, 2, 3, 4])|tl([1, 2, 3, 4])]. [1,2,3,4]
! 数学の集合記法みたいなもの ◦ [ 式 || 式を適用する集合 ] ◦ 集合に対して条件も記述可能
20> [2*N || N <- [1, 2, 3, 4]]. [2,4,6,8] 21> [2*N || N <- [1, 2, 3, 4], N rem 2 =:= 0]. [4,8] 23> [X+Y || X <- [1, 2], Y <- [2,3]]. [3,4,4,5]
! 電話会社が作ったらしさが見える機能 ◦ バイナリデータを<< >> で囲む
35> Pixels = <<213,45,132,64,76,32,76,0,0,234,32,15>>. <<213,45,132,64,76,32,76,0,0,234,32,15>> 36> <<Pix1:24, Pix2:24, Pix3:24, Pix4:24>> = Pixels. <<213,45,132,64,76,32,76,0,0,234,32,15>> 39> <<Pix1:24>>. <<213,45,132>>
! リスト内包と同様のことをバイナリでも実現可能 ◦ <- の代わりに <= を利用する
35> Pixels = <<213,45,132,64,76,32,76,0,0,234,32,15>>. <<213,45,132,64,76,32,76,0,0,234,32,15>> 41> RGB = [ {R,G,B} || <<R:8,G:8,B:8>> <= Pixels ]. [{213,45,132},{64,76,32},{76,0,0},{234,32,15}]
! 基本中の基本まで見てみました ◦ 関数型言語のエッセンスを感じられれば ◦ 一番大物の関数の紹介がまだです " 次回あたりにやります " そのころには実用的なコードが書けるようになっているはず(^^