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

Más contenido relacionado

Destacado

Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49shoma h
 
Katagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 CryptoKatagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 Cryptotrmr
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたってTsuyoshi Matsudate
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門Kimikazu Kato
 
120901fp key
120901fp key120901fp key
120901fp keyksknac
 
関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)tadaaki hayashi
 
データベース入門3
データベース入門3データベース入門3
データベース入門3tadaaki hayashi
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!Ra Zon
 
Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門yujiro_t
 
数学プログラムを Haskell で書くべき 6 の理由
数学プログラムを Haskell で書くべき 6 の理由数学プログラムを Haskell で書くべき 6 の理由
数学プログラムを Haskell で書くべき 6 の理由Hiromi Ishii
 
JavaDayTokyo2015 [3-1]
JavaDayTokyo2015 [3-1]JavaDayTokyo2015 [3-1]
JavaDayTokyo2015 [3-1]Kenji Kazumura
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)Uptime Technologies LLC (JP)
 
ニコニコ生放送の配信基盤改善
ニコニコ生放送の配信基盤改善ニコニコ生放送の配信基盤改善
ニコニコ生放送の配信基盤改善takahiro_yachi
 
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けープログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けーTanUkkii
 

Destacado (16)

Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
 
Katagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 CryptoKatagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 Crypto
 
JSer Class #1
JSer Class #1JSer Class #1
JSer Class #1
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
 
120901fp key
120901fp key120901fp key
120901fp key
 
関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)
 
データベース入門3
データベース入門3データベース入門3
データベース入門3
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
 
Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門
 
数学プログラムを Haskell で書くべき 6 の理由
数学プログラムを Haskell で書くべき 6 の理由数学プログラムを Haskell で書くべき 6 の理由
数学プログラムを Haskell で書くべき 6 の理由
 
JavaDayTokyo2015 [3-1]
JavaDayTokyo2015 [3-1]JavaDayTokyo2015 [3-1]
JavaDayTokyo2015 [3-1]
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
 
ニコニコ生放送の配信基盤改善
ニコニコ生放送の配信基盤改善ニコニコ生放送の配信基盤改善
ニコニコ生放送の配信基盤改善
 
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けープログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
 

Más de Kiminari Homma

Smart Communication Award 2016 モバイル電話サポートSDK
Smart Communication Award 2016 モバイル電話サポートSDKSmart Communication Award 2016 モバイル電話サポートSDK
Smart Communication Award 2016 モバイル電話サポートSDKKiminari Homma
 
コールセンターを知る
コールセンターを知るコールセンターを知る
コールセンターを知るKiminari Homma
 
IPメッセージング勉強会「WebのリアルタイムとIPメッセージング」
IPメッセージング勉強会「WebのリアルタイムとIPメッセージング」IPメッセージング勉強会「WebのリアルタイムとIPメッセージング」
IPメッセージング勉強会「WebのリアルタイムとIPメッセージング」Kiminari Homma
 
私の考える Startup Geeks
私の考える Startup Geeks私の考える Startup Geeks
私の考える Startup GeeksKiminari Homma
 
Twilio serveless architecture
Twilio serveless architectureTwilio serveless architecture
Twilio serveless architectureKiminari Homma
 
スタートアップが AWS Lambda を導入した理由
スタートアップが AWS Lambda を導入した理由スタートアップが AWS Lambda を導入した理由
スタートアップが AWS Lambda を導入した理由Kiminari Homma
 
電話とは何か、そして Twilio の正体
電話とは何か、そして Twilio の正体電話とは何か、そして Twilio の正体
電話とは何か、そして Twilio の正体Kiminari Homma
 
Agu itr 20100901_communication
Agu itr 20100901_communicationAgu itr 20100901_communication
Agu itr 20100901_communicationKiminari Homma
 

Más de Kiminari Homma (19)

Smart Communication Award 2016 モバイル電話サポートSDK
Smart Communication Award 2016 モバイル電話サポートSDKSmart Communication Award 2016 モバイル電話サポートSDK
Smart Communication Award 2016 モバイル電話サポートSDK
 
コールセンターを知る
コールセンターを知るコールセンターを知る
コールセンターを知る
 
IPメッセージング勉強会「WebのリアルタイムとIPメッセージング」
IPメッセージング勉強会「WebのリアルタイムとIPメッセージング」IPメッセージング勉強会「WebのリアルタイムとIPメッセージング」
IPメッセージング勉強会「WebのリアルタイムとIPメッセージング」
 
私の考える Startup Geeks
私の考える Startup Geeks私の考える Startup Geeks
私の考える Startup Geeks
 
Twilio serveless architecture
Twilio serveless architectureTwilio serveless architecture
Twilio serveless architecture
 
スタートアップが AWS Lambda を導入した理由
スタートアップが AWS Lambda を導入した理由スタートアップが AWS Lambda を導入した理由
スタートアップが AWS Lambda を導入した理由
 
電話とは何か、そして Twilio の正体
電話とは何か、そして Twilio の正体電話とは何か、そして Twilio の正体
電話とは何か、そして Twilio の正体
 
Swift afterbeginner
Swift afterbeginnerSwift afterbeginner
Swift afterbeginner
 
Swift afterbeginner
Swift afterbeginnerSwift afterbeginner
Swift afterbeginner
 
Call cloud
Call cloudCall cloud
Call cloud
 
Erlang
ErlangErlang
Erlang
 
Agu itr 20100901_communication
Agu itr 20100901_communicationAgu itr 20100901_communication
Agu itr 20100901_communication
 
Rfid
RfidRfid
Rfid
 
Java script4
Java script4Java script4
Java script4
 
Java Script4
Java Script4Java Script4
Java Script4
 
Javascript3
Javascript3Javascript3
Javascript3
 
Jsonp
JsonpJsonp
Jsonp
 
可読性
可読性可読性
可読性
 
Java script1
Java script1Java script1
Java script1
 

Último

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 

Último (10)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 

Erlang

Notas del editor

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