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


                   小泉 将久
       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

More Related Content

PDF
F#入門 ~関数プログラミングとは何か~
PDF
C++コミュニティーの中心でC++をDISる
PDF
関数型プログラミング入門 with OCaml
ODP
Real World OCamlを読んでLispと協調してみた
PDF
関数プログラミング入門
PDF
たのしい高階関数
PDF
Pfi Seminar 2010 1 7
PDF
ゲーム開発者のための C++11/C++14
F#入門 ~関数プログラミングとは何か~
C++コミュニティーの中心でC++をDISる
関数型プログラミング入門 with OCaml
Real World OCamlを読んでLispと協調してみた
関数プログラミング入門
たのしい高階関数
Pfi Seminar 2010 1 7
ゲーム開発者のための C++11/C++14

What's hot (20)

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

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

PDF
F#によるFunctional Programming入門
PDF
これから Haskell を書くにあたって
PPTX
関数型言語&形式的手法セミナー(3)
ODP
これから Haskell を書くにあたって
PDF
Unity2015_No10_~UGUI&Audio~
PDF
モナドハンズオン前座
PPTX
関数型言語初心者の俺がF#触ってみた
PDF
FP習熟度レベルとFSharpxのIteratee
PPTX
F#のコンピュテーション式
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
PDF
Scalaプログラミング・マニアックス
PDF
Object-Functional Analysis and Design and Programming温泉
PDF
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
PPTX
大人のお型付け
PDF
Object-Funcational Analysis and design
PDF
Javaプログラミング入門
KEY
Clojure programming-chapter-2
PDF
Ssaw08 0916
ODP
F#とC#で見る関数志向プログラミング
PDF
関数型都市忘年会『はじめての函数型プログラミング』
F#によるFunctional Programming入門
これから Haskell を書くにあたって
関数型言語&形式的手法セミナー(3)
これから Haskell を書くにあたって
Unity2015_No10_~UGUI&Audio~
モナドハンズオン前座
関数型言語初心者の俺がF#触ってみた
FP習熟度レベルとFSharpxのIteratee
F#のコンピュテーション式
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Scalaプログラミング・マニアックス
Object-Functional Analysis and Design and Programming温泉
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
大人のお型付け
Object-Funcational Analysis and design
Javaプログラミング入門
Clojure programming-chapter-2
Ssaw08 0916
F#とC#で見る関数志向プログラミング
関数型都市忘年会『はじめての函数型プログラミング』
Ad

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