SlideShare una empresa de Scribd logo
1 de 40
Erlang 入門 括弧が要らない! Windowsでも楽ちん! 並行プログラミングもOK! 英語OKなら何気に資料も多いぞ! ・・・そんな関数型言語 Erlang にIT土方系PHPerが果敢にも挑戦している最中です。 id:msakamoto-sf 坂本 昌彦 [email_address]
最初に 場所を提供していただきました 株式会社  EC ナビ様 ありがとう御座います! ヽ (´ ー `) ノ
Erlangって? ,[object Object],[object Object],[object Object],[object Object],[object Object]
「あーらん」? ,[object Object],[object Object],[object Object],[object Object]
知名度UPのきっかけ。 ,[object Object],[object Object],[object Object],[object Object]
なぜLisp/Schemeじゃないの? ,[object Object],[object Object],[object Object],[object Object],[object Object]
なぜErlang? ,[object Object],[object Object],[object Object],[object Object],[object Object]
PHPerのアナタにこそErlang(w ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Erlang/OTP ,[object Object],[object Object],[object Object],[object Object],[object Object]
Windows用のバイナリ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Erlangの世界(0) - ようこそ、Erlangの世界へ - ,[object Object]
"Hello, Erlang!" ,[object Object],-module(hello). -export([start/0]). start() -> io:format("Hello, Erlang!~n").
"Hello, Erlang!" ,[object Object],C:n_vitrorlang>erl Eshell V5.6.3  (abort with ^G) 1> c(hello) . {ok,hello} 2> hello:start(). Hello, Erlang! ok
"-module(hello)." ,[object Object],[object Object],[object Object]
"-export([start/0])." ,[object Object],[object Object],[object Object],[object Object]
start() ->  io:format("Hello, Erlang!~n"). ,[object Object],[object Object],[object Object],[object Object]
"c(hello)." ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
"hello:start()." ,[object Object]
Erlangの世界(1) ,[object Object]
変数名は大文字で始まる英数字 とアンダースコア("_") ,[object Object],C:n_vitrorlang>erl Eshell V5.6.3  (abort with ^G) 1> Var1 = 100. 100 2> Var1_2 = 200. 200 3> var2 = 300. ** exception error: no match of right hand side value 300 4> Var2-1 = 400. * 1: illegal pattern OK! NG!
変数への代入は 一度だけ ! ,[object Object],9> Var1 = 100. 100 10> Var1 = "ABCD". ** exception error: no match of right hand side value "ABCD" 11> b(). Var1 = 100 ok
「束縛」? ,[object Object],[object Object],11> b(). Var1 = 100 ok 12> f(). ok 13> Var1 = "ABCD". "ABCD"
Erlangの世界(2) ,[object Object]
C言語での列挙型。定数みたいな。 ,[object Object],[object Object],[object Object],[object Object],17> hello. hello 18> 'Friday Night'. 'Friday Night' 19> 'user_01@example.com'. 'user_01@example.com'
Erlangの世界(3) ,[object Object]
複数の変数をひとまとめにする単位 ,[object Object],[object Object],[object Object],[object Object],1> X = {1, "hello", world }. {1,"hello",world} 2> Y = { {orange, 100}, {apple, 300} }. {{orange,100},{apple,300}}
タプルの値の取得(1) ,[object Object],3> {V1, V2} = X. ** exception error: no match of right hand side value {1,"hello",world} 4> {V1, V2, V3} = X. {1,"hello",world} 5> V1. 1 6> V2. "hello" 7> V3. world
タプルの値の取得(2) ,[object Object],9> V1 = { apple, 100 }. {apple,100} 10> V2 = { orange, 200 }. {orange,200} 11> { apple, Price } = V1. {apple,100} 12> { orange, Price_orange } = V1. ** exception error: no match of right hand side value {apple,100} 13> { orange, Price_orange } = V2. {orange,200} 14> { Price, Price_orange }. {100,200}
Erlangの世界(4) ,[object Object]
いわゆる配列 ,[object Object],1> X = [1, "Hello", world, 2 + 3, { apple, 10 }, [ 4, 5, 6 ] ]. [1,"Hello",world,5,{apple,10},[4,5,6]]
いわゆる配列 ,[object Object],1> X = [1, "Hello", world, 2 + 3, { apple, 10 }, [ 4, 5, 6 ] ]. [1,"Hello",world,5,{apple,10},[4,5,6]]
値の取得(HeadとTail) ,[object Object],[object Object],[object Object],2> lists:nth(1, X). 1 3> [H | T] = X. [1,"Hello",world,5,{apple,10},[4,5,6]] 4> H. 1 5> T. ["Hello",world,5,{apple,10},[4,5,6]]
Erlangの世界(5) ,[object Object]
連想配列みたいな。 ,[object Object],[object Object],-record(person, {  %%  デフォルト値有り name = "anonymous",  %%  デフォルト値無し age,  weight  }).
レコードの作成・参照 ,[object Object],1> rr("records.hrl"). [person] 2> V1 = #person{}. #person{name = "anonymous",age = undefined, weight = undefined} 3> V2 = #person{ name = "Jon", age = 20, weight = 60 }. #person{name = "Jon",age = 20,weight = 60} 4> V3 = #person{ name = "Smith", age = 30, weight = 58 }. #person{name = "Smith",age = 30,weight = 58} 5> #person{ name = N, age = A, weight = W } = V3. #person{name = "Smith",age = 30,weight = 58} 6> [ N, A, W ]. ["Smith",30,58]
Erlangの世界(6) ,[object Object]
引数の数の異なる関数は区別される。 ,[object Object],-module(funtest1). -export([funtest/0, funtest/1, funtest/2]). funtest() -> -1. funtest(N) -> N * 2. funtest(N, M) -> N + M. -> 1> c(funtest1). {ok,funtest1} 2> { funtest1:funtest(), funtest1:funtest(10), funtest1:funtest(20, 30) }. {-1,20,50}
"ガード"による区別 ,[object Object],-module(funtest2). -export([fact/1]). fact(N) when N > 0 -> N * fact(N - 1); fact(0) -> 1. -> 1> c(funtest2). {ok,funtest2} 2> funtest2:fact(5). 120
fun() ,[object Object],1> Double = fun(X) -> X * 2. * 1: syntax error before: '.' 1> Double = fun(X) -> X * 2 end. #Fun<erl_eval.6.13229925> 2> L = [ 1, 2, 3, 4]. [1,2,3,4] 3> lists:map(Double, L). [2,4,6,8]
今回はここまで。 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Más contenido relacionado

La actualidad más candente

La actualidad más candente (7)

黒い目の大きな女の子:構文から意味へ
黒い目の大きな女の子:構文から意味へ黒い目の大きな女の子:構文から意味へ
黒い目の大きな女の子:構文から意味へ
 
機械翻訳の今昔物語
機械翻訳の今昔物語機械翻訳の今昔物語
機械翻訳の今昔物語
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
エラーハンドリング
エラーハンドリングエラーハンドリング
エラーハンドリング
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScript
 
変数、リファレンス
変数、リファレンス変数、リファレンス
変数、リファレンス
 

Destacado (7)

Pseudo Perl
Pseudo PerlPseudo Perl
Pseudo Perl
 
PHP With Windows binary
PHP With Windows binaryPHP With Windows binary
PHP With Windows binary
 
第2回PHP懇親会発表資料
第2回PHP懇親会発表資料第2回PHP懇親会発表資料
第2回PHP懇親会発表資料
 
Pseudo Block
Pseudo BlockPseudo Block
Pseudo Block
 
深い親子関係のテーブル設計
深い親子関係のテーブル設計深い親子関係のテーブル設計
深い親子関係のテーブル設計
 
PHP With Windows binary
PHP With Windows binaryPHP With Windows binary
PHP With Windows binary
 
SEO: Getting Personal
SEO: Getting PersonalSEO: Getting Personal
SEO: Getting Personal
 

Similar a Introduction to Erlang/OTP

Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうGoで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろう
Esehara Shigeo
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
mitamex4u
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Ransui Iso
 
ZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみるZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみる
Koichi Suzuki
 
鬱くしい日本語のための形態素解析入門
鬱くしい日本語のための形態素解析入門鬱くしい日本語のための形態素解析入門
鬱くしい日本語のための形態素解析入門
Hiroyoshi Komatsu
 
第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」
Hiromu Shioya
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
pocketberserker
 
ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】
株式会社ランチェスター
 

Similar a Introduction to Erlang/OTP (20)

Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうGoで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろう
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
プログラミング講座 #2 複雑なデータの扱い
プログラミング講座 #2 複雑なデータの扱いプログラミング講座 #2 複雑なデータの扱い
プログラミング講座 #2 複雑なデータの扱い
 
ErlangでErlagVM上で動く言語の作り方
ErlangでErlagVM上で動く言語の作り方ErlangでErlagVM上で動く言語の作り方
ErlangでErlagVM上で動く言語の作り方
 
ZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみるZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみる
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
第一回ゆるふわーる
第一回ゆるふわーる第一回ゆるふわーる
第一回ゆるふわーる
 
鬱くしい日本語のための形態素解析入門
鬱くしい日本語のための形態素解析入門鬱くしい日本語のための形態素解析入門
鬱くしい日本語のための形態素解析入門
 
第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」
 
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
 
Perl io layer
Perl io layerPerl io layer
Perl io layer
 
20年越しで Perl 4 to 5 した話
20年越しで Perl 4 to 5 した話20年越しで Perl 4 to 5 した話
20年越しで Perl 4 to 5 した話
 
Symfony温泉2014 自己紹介LT
Symfony温泉2014 自己紹介LTSymfony温泉2014 自己紹介LT
Symfony温泉2014 自己紹介LT
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
 
ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
Lucene gosenの紹介 solr勉強会第7回
Lucene gosenの紹介 solr勉強会第7回Lucene gosenの紹介 solr勉強会第7回
Lucene gosenの紹介 solr勉強会第7回
 

Introduction to Erlang/OTP

  • 1. Erlang 入門 括弧が要らない! Windowsでも楽ちん! 並行プログラミングもOK! 英語OKなら何気に資料も多いぞ! ・・・そんな関数型言語 Erlang にIT土方系PHPerが果敢にも挑戦している最中です。 id:msakamoto-sf 坂本 昌彦 [email_address]
  • 2. 最初に 場所を提供していただきました 株式会社  EC ナビ様 ありがとう御座います! ヽ (´ ー `) ノ
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.