Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Erlangを触ってみた

1,041 views

Published on

  • Be the first to comment

  • Be the first to like this

Erlangを触ってみた

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

×