SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
これからの
「言語」の話をしよう
 ― 未来を生きるためのツール ―


                   小泉 将久
       F# User Group - Japan
自己紹介
• 小泉 将久 (Nobuhisa Koizumi)
• F# User Group - Japan 代表
•   @nobuhisa_k
• id:Nobuhisa (はてな)
• セキュリティキャンプ2005


          #osc11do #fsharp
関数型言語に
興味のある人!
パラダイム
パラダイムって何だろう
         問題点・・・?

手続き型プログラミング
     と
関数型プログラミング
手続き型の悪いところ?

• 抽象度が低い?
• バグが発生しやすい?
• 並列計算に不向き?
• \ 美しくない!/
抽象度が低い?
              人間のための
      関数型      パラダイム




コンピュータ寄りの
  パラダイム     手続き型
関数型プログラミングとは
• 機能(関数)を中心に考える
  関数は値である(第一級) 10
• 関数は値

           func
                  “hello”

• 副作用はちょっとだけ ♥
関数型プログラミングとは

        E

    A
C
              D
    B


関数合成        高階関数
関数型プログラミングとは
バグ
     • 変数束縛
         let a = 1024
並列
     束縛したら変更できない
          変更できない


 慣れると、こっちのほうが
 プログラミングしやすい!
F#
Open Source !!
あらゆる言語を研究した
    最先端の
   関数型言語
F#
• Microsoft Research(2005~)
• マルチパラダイム
    関数型(非純粋)
    手続き型
    オブジェクト指向
    言語指向
OCaml
Haskell
Python
F#の守備範囲
F#の守備範囲
• Webアプリケーションも書ける
例)http://fssnip.net/
F#の守備範囲
• 3Dだって扱える(DirectX, WPF)
 例)F# 3DVisualization
F#の守備範囲
• Xboxのゲームも作れる
 例)The Path of Go
F#の守備範囲
• もちろん業務アプリも!
F#の守備範囲
• その他
 – スマートフォンのアプリケーション
 – バッチ処理、スクリプティング
     • スクリプト言語としてのF# - .fsx は強力だった!

 – 並列計算が得意

• Demonstration !
 –   Windows Form
 –   FSharpChart
F#の美しさ
判別共用体
                      & パターソマッチ

type Animal = Dog | Cat | Rabbit | Bird
let speak = function
    | Dog    -> "わんわん!"
    | Cat    -> "にゃーにゃー"
    | Rabbit -> "..."
    | Bird   -> "ぴーちくぱーちく"
public abstract class Animal
{
       public abstract string   Speak();
}
public class Dog : Animal
{
       public override string   Speak() { return "わんわん!"; }
}
public class Cat : Animal
{
       public override string   Speak() { return "にゃーにゃー"; }
}
public class Rabbit : Animal
{
       public override string   Speak() { return "..."; }
}
public class Bird : Animal
{
       public override string   Speak() { return "ぴーちくぱーちく"; }
}
部分適用
                   & 関数合成
                      (&型推論)



let compute = (+) 1 >> (*) 10
private Func<T, U> Compose<T, U>(Func<U, U> f, Func<T, U> g)
{
       return (x => f(g(x)));
}
private int F(int x, int y)
{
       return x * y;
}
private int G(int x, int y)
{
       return x + y;
}
public int Compute(int arg)
{
       return this.Compose(
               (int x) => F(10, x), (int x) => G(1, x))(arg);
}
測定単位

[<Measure>] type km
[<Measure>] type h

let time = 8<h>
let speed = 156<km/h>
リスト内包表記
                            (シーケンス式)

[ for x in 0..10 -> (x, pown 2 x) ]



val it   : (int * int) list =
  [(0,   1); (1, 2); (2, 4); (3, 8); (4, 16);
   (5,   32); (6, 64); (7, 128); (8, 256);
   (9,   512); (10, 1024)]
public IEnumerable<Tuple<int, int>> Pain()
{
        return from x in Enumerable.Range(0, 11)
                select new Tuple<int, int>(x, (int)System.Math.Pow(2, x));
}
モナド
         (コンピューテーション式)

maybe { let! x = Some 7
        let! y = Some 3
        return x + y }
並列計算
並列化の困難
例えば・・・
         素敵な    読 : 問題なし
         ファイル   書 : 問題あり
関数型と並列
値が変更できない
 (immutable)

Read Only !

並列化が容易!
(何も意識する必要がない)
F#なら朝メシ前!
• 標準ライブラリが
  並列計算を強力にサポート!
• Demonstration !
  画像処理を並列化しよう
 –画像処理を並列化しよう
おすすめ書籍
コミュニティ
• F# User Group - Japan
  http://tinyurl.com/fsugjp
  – メーリングリスト
  – Lingr
  – Wiki
  – twitter : #fsharp, #fsugjp

• MSDNフォーラム : Visual F#
F#の街
さっぽろ
なまら
F#しようよ!
Q&A

• なんでもどうぞ!
• 展示会場にF#のブースもあります!
λ




    おしまい


              小泉 将久
           @nobuhisa_k

Más contenido relacionado

La actualidad más candente

Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
kiki utagawa
 
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
Naoki Kitora
 

La actualidad más candente (20)

Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
 
Material
MaterialMaterial
Material
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
(define)なしで再帰関数を定義する
(define)なしで再帰関数を定義する(define)なしで再帰関数を定義する
(define)なしで再帰関数を定義する
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書く
 
F#のすすめ
F#のすすめF#のすすめ
F#のすすめ
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
 
Van laarhoven lens
Van laarhoven lensVan laarhoven lens
Van laarhoven lens
 
現実(えくせる)と戦う話
現実(えくせる)と戦う話現実(えくせる)と戦う話
現実(えくせる)と戦う話
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
 
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
 
普通のプログラミング言語R
普通のプログラミング言語R普通のプログラミング言語R
普通のプログラミング言語R
 
Map
MapMap
Map
 
20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift
 
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
Find(1)
Find(1)Find(1)
Find(1)
 

Similar a これからの「言語」の話をしよう ―― 未来を生きるためのツール

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
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
pocketberserker
 
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうGoで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろう
Esehara Shigeo
 
Exgettextの話
Exgettextの話Exgettextの話
Exgettextの話
k1complete
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
Tomonobu_Hirano
 
ソフトウェア開発の心得
ソフトウェア開発の心得ソフトウェア開発の心得
ソフトウェア開発の心得
Hiroki Tanioka
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
CHY72
 
関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013
Esehara Shigeo
 

Similar a これからの「言語」の話をしよう ―― 未来を生きるためのツール (20)

はじめての「R」
はじめての「R」はじめての「R」
はじめての「R」
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
 
第一回ゆるふわーる
第一回ゆるふわーる第一回ゆるふわーる
第一回ゆるふわーる
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうGoで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろう
 
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライターgenuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
 
Exgettextの話
Exgettextの話Exgettextの話
Exgettextの話
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
 
Django_fukuoka
Django_fukuokaDjango_fukuoka
Django_fukuoka
 
Django_Fukuoka
Django_FukuokaDjango_Fukuoka
Django_Fukuoka
 
ソフトウェア開発の心得
ソフトウェア開発の心得ソフトウェア開発の心得
ソフトウェア開発の心得
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 
Tokyor23 doradora09
Tokyor23 doradora09Tokyor23 doradora09
Tokyor23 doradora09
 
関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
 

Último

Último (12)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: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の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: 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
 
論文紹介: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...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

これからの「言語」の話をしよう ―― 未来を生きるためのツール