SlideShare uma empresa Scribd logo
1 de 101
Baixar para ler offline
F#を学んで感じた関数プログラミング
  習熟度レベル+FSharpx の Iteratee

        pocketberserker


        2012 年 9 月 1 日
自己紹介




• 中山 / なかやん
• @pocketberserker / id:pocketberserker
• どこにでもいるふつーのサーガ大学院生
• F# / Haskell / (Erlang) / TDD / テスト
• FSharpx の Contributor らしい…
私と関数型
私と関数型




初期の思い込み
私と関数型




関数型 = Lisp でしょ?
私と関数型




    関数型 = Lisp でしょ?
Lisp こわいから関数型こわい
結論から言えば
結論から言えば



• ただの食わず嫌いでした、ごめんなさい
結論から言えば



• ただの食わず嫌いでした、ごめんなさい
• 初めて参加した勉強会(TDDBC 名古屋)で
 思い違いを知る
結論から言えば



• ただの食わず嫌いでした、ごめんなさい
• 初めて参加した勉強会(TDDBC 名古屋)で
  思い違いを知る
• 気がついたら Java から F#に鞍替えしていた
結論から言えば



• ただの食わず嫌いでした、ごめんなさい
• 初めて参加した勉強会(TDDBC 名古屋)で
  思い違いを知る
• 気がついたら Java から F#に鞍替えしていた
• これがちょうど 2 年前の話
学んだり会話したりして感じたこと
学んだり会話したりして感じたこと




関数プログラミングにも習熟度レベルがある?
ざっくりと考えてみる
免責事項



• 人によって “関数プログラミング (FP)” の定義
  は異なる
• ここでは:基本副作用を許さず関数が第一級
  の値なら FP
• 動的型付け:わからないので今回は除外
想像してみた習熟度レベル(言語共通)




1. はろー再帰呼び出し
2. 再帰より高階関数
想像してみた習熟度レベル(静的型付け編)




 1. Option, Either
 2. モナドを使う
 3. モナド自作
はろー再帰呼び出し
はろー再帰呼び出し



• 基本的な部品の一つ
はろー再帰呼び出し



• 基本的な部品の一つ
• これを理解できないと(たぶん)後々つらい
はろー再帰呼び出し



• 基本的な部品の一つ
• これを理解できないと(たぶん)後々つらい
• でも再帰は最後の手段
はろー再帰呼び出し



• 基本的な部品の一つ
• これを理解できないと(たぶん)後々つらい
• でも再帰は最後の手段
• 不必要に多用しているうちは訓練不足
再帰より高階関数
再帰より高階関数


• 目的に特化した高階関数は fold 系でも書ける
再帰より高階関数


• 目的に特化した高階関数は fold 系でも書ける
• fold 系は再帰でも書ける
再帰より高階関数


• 目的に特化した高階関数は fold 系でも書ける
• fold 系は再帰でも書ける
• 再帰 > fold 系 > 目的に特化した高階関数 と
 いう力関係
再帰より高階関数


• 目的に特化した高階関数は fold 系でも書ける
• fold 系は再帰でも書ける
• 再帰 > fold 系 > 目的に特化した高階関数 と
  いう力関係
• 力の弱いほうを使ったほうがコードがわかり
  やすい
再帰より高階関数


• 目的に特化した高階関数は fold 系でも書ける
• fold 系は再帰でも書ける
• 再帰 > fold 系 > 目的に特化した高階関数 と
  いう力関係
• 力の弱いほうを使ったほうがコードがわかり
  やすい
• 力の弱いものを優先して使っていく
力の階層と節度




     関数プログラミングの道しるべ
“函数プログラミングの集い 2011” での山本さんの
          発表資料
高階関数になれるためにも・
            ・・
高階関数になれるためにも・
              ・・


• 訓練あるのみ
高階関数になれるためにも・
              ・・


• 訓練あるのみ
• 一度再帰で書いて、後でリファクタリングで
 きないか検討
高階関数になれるためにも・
              ・・


• 訓練あるのみ
• 一度再帰で書いて、後でリファクタリングで
  きないか検討
• そのうち一気に高階関数のほうで書けるよう
  になる
高階関数になれるためにも・
              ・・


• 訓練あるのみ
• 一度再帰で書いて、後でリファクタリングで
  きないか検討
• そのうち一気に高階関数のほうで書けるよう
  になる
• 注意:リファクタリングにはテストコード
  必須
ここから静的型付けの話
Option(Maybe), Either
Option(Maybe), Either



• 値が返ってこないかもしれない計算
Option(Maybe), Either



• 値が返ってこないかもしれない計算
• 失敗や例外を投げる計算
Option(Maybe), Either



• 値が返ってこないかもしれない計算
• 失敗や例外を投げる計算
• “カターンゼン!”
Option(Maybe), Either



• 値が返ってこないかもしれない計算
• 失敗や例外を投げる計算
• “カターンゼン!”
• モナドへの第一歩
モナドを使う
モナドを使う




• 使えなくても FP できる(純粋なものは別)
モナドを使う




• 使えなくても FP できる(純粋なものは別)
• でも使えたら便利!
モナドを使う




• 使えなくても FP できる(純粋なものは別)
• でも使えたら便利!
• 使うところからはじめましょう
モナド自作
モナド自作



• まだ見ぬ高み
モナド自作



• まだ見ぬ高み
• 先ほど dico leque さんが発表していたらしい
モナド自作



• まだ見ぬ高み
• 先ほど dico leque さんが発表していたらしい
• 発表聞いた人は感想教えてください!
モナド自作



• まだ見ぬ高み
• 先ほど dico leque さんが発表していたらしい
• 発表聞いた人は感想教えてください!
• と思ったけどハッシュタグ見てたら厳しい
 かも…
ここまでのまとめ



• FP には習熟度レベルがあるぽい
• 次に挑戦すべき段差が何か知ることができれ
  ば学びやすいのかも
• 一歩一歩進めばそのうち上達する
• こわくない
FSharpx の Iteratee
Iteratee
Iteratee



• I/O の表現の一つ
Iteratee



• I/O の表現の一つ
• データを読み込んでコールバック関数に渡す
Iteratee



• I/O の表現の一つ
• データを読み込んでコールバック関数に渡す
• データと処理の分離
Iteratee



• I/O の表現の一つ
• データを読み込んでコールバック関数に渡す
• データと処理の分離
• コンビネータ的な操作
ソースコードで説明してみる
注意




ここからの公用語は(もしかしたら)
       F#です
入力データを表す Stream     

 type Stream’a =
 | Chunk of ’a
 | Empty
 | EOF
                            


データ Chunk, 空 Empty, 終端 EOF
消費者 Iteratee             

 type Iteratee’el,’a =
 | Done of ’a * Stream’el
 | Error of exn
 | Continue of
   (Stream’el - Iteratee’el,’a)
                                      


処理終了状態 Done, 計算途中 Continue, エラー
Error
生産者 Enumerator   

 type Enumerator’el,’a =
   Iteratee’el,’a -
     Iteratee’el,’a
                            


Iteratee にデータを与える
パイプ Enumeratee               

 type Enumeratee’elo,’eli,’a =
   Iteratee’eli,’a -
     Iteratee’elo, Iteratee’eli,’a
                                        


enumerator からデータを受け取り Iteratee に渡す
疲れたのでちょっと休憩




            ことりちゃんマジかわいい本
画像は mzp さん、bleis さんの許可を得て掲載しています
ここからは




FSharpx での実装を使って使用方法の紹介
FSharpxって?
FSharpxって?



• Core にはない便利な関数の提供
FSharpxって?



• Core にはない便利な関数の提供
• Core, Http, Observable, TypeProviders
FSharpxって?



• Core にはない便利な関数の提供
• Core, Http, Observable, TypeProviders
• ちなみに F#er 内で賛否両論ある模様
FSharpxって?



• Core にはない便利な関数の提供
• Core, Http, Observable, TypeProviders
• ちなみに F#er 内で賛否両論ある模様
• 例:Core だけで既に重量級ライブラリ
FSharpx の Iteratee
FSharpx の Iteratee


• F#での Iteratee 実装
FSharpx の Iteratee


• F#での Iteratee 実装
• (∗ ) や ( ∗) も実装されている
FSharpx の Iteratee


• F#での Iteratee 実装
• (∗ ) や ( ∗) も実装されている
• Iteratee.List と Iteratee.Binary(ByteString)
FSharpx の Iteratee


• F#での Iteratee 実装
• (∗ ) や ( ∗) も実装されている
• Iteratee.List と Iteratee.Binary(ByteString)
• 欠点 1:Enumeratee が 1 つも実装されてい
  ない
FSharpx の Iteratee


• F#での Iteratee 実装
• (∗ ) や ( ∗) も実装されている
• Iteratee.List と Iteratee.Binary(ByteString)
• 欠点 1:Enumeratee が 1 つも実装されてい
  ない
• 欠点 2:Eumeratee と Iteratee を合成する関
  数がない
FSharpx の Iteratee


• F#での Iteratee 実装
• (∗ ) や ( ∗) も実装されている
• Iteratee.List と Iteratee.Binary(ByteString)
• 欠点 1:Enumeratee が 1 つも実装されてい
  ない
• 欠点 2:Eumeratee と Iteratee を合成する関
  数がない
FSharpx の Iteratee


 • F#での Iteratee 実装
 • (∗ ) や ( ∗) も実装されている
 • Iteratee.List と Iteratee.Binary(ByteString)
 • 欠点 1:Enumeratee が 1 つも実装されてい
   ない
 • 欠点 2:Eumeratee と Iteratee を合成する関
   数がない
だったのが一昨日までの話
おかげで資料を一部作り直すことに…
気持ちを切り替え



使ってみよう Enumerator - あどけない話
のネタを参考に F#でデモ(時間があれば)
Iteratee を作る                      

let rec consumer =
  iteratee {
    let! mw = head
    match mw with
    | None - ()
    | Some w -
      printf XXX 
      w
      | (ByteString.singleton  ByteString.toString)
      | printfn %s
      return! consumer
  }
                                                        


head はストリームを消費して要素を取り出す
Iteratee
実行その 1   

 run | consumer
Enumerator を作ってみる   

let listFeeder =
  [BS 12B; BS 34B]
  | enumList
実行その 2           

 run | listFeeder consumer
XXX 1
XXX 2
XXX 3
XXX 4
入力を増やす                

let fileFeeder =
  IO.readFile @.FILE
  | Seq.map ByteString.ofString
  | Seq.toList
  | enumList
実行その 3                    

  run | (fileFeeder  listFeeder) consumer
 XXX 1
 XXX 2
 XXX 3
 XXX 4
 XXX 5
 XXX 6
 XXX 7
 XXX 8
お仕事を増やす                            

let consumer2 =
  iteratee {
    let! mw = head
    match mw with
    | None - ()
    | Some w -
      printf YYY 
      w
      | (ByteString.singleton  ByteString.toString)
      | printfn %s
  }
実行その 4                               

 run | (fileFeeder  listFeeder) (consumer2 . consumer)
YYY 1
XXX 2
XXX 3
XXX 4
XXX 5
XXX 6
XXX 7
XXX 8
仲介者を使った実行                       

 run | listFeeder (joinI (isolate 2 consumer))
XXX 1
XXX 2
                                                  


isolate は与えられた数の個数だけ入力を取り出す
Iteratee 一覧


• fold
• length
• peek
• head
• drop
• take
• 他にもいくつか
Enumerator 一覧


• enumerate
• enumeratePure1Chunk
• enumeratePureNChunk
• connect
• repeat
• replicate
• enumList
Enumeratee 一覧



• isolate, isolateWhile, isolateUntil
• concatMap
• map
• filter
余談:Iteratee 触るまでにかかった期間とか
余談:Iteratee 触るまでにかかった期間とか


 • すごい H 本再読 1 週間
余談:Iteratee 触るまでにかかった期間とか


 • すごい H 本再読 1 週間
 • Haskell の enumerator コードリーディング 3
  日?
余談:Iteratee 触るまでにかかった期間とか


 • すごい H 本再読 1 週間
 • Haskell の enumerator コードリーディング 3
   日?
 • scalaz コードリーディング挫折 2 日
余談:Iteratee 触るまでにかかった期間とか


 • すごい H 本再読 1 週間
 • Haskell の enumerator コードリーディング 3
   日?
 • scalaz コードリーディング挫折 2 日
 • FSharpx.Iteratee のバグ潰し 1 日
余談:Iteratee 触るまでにかかった期間とか


 • すごい H 本再読 1 週間
 • Haskell の enumerator コードリーディング 3
   日?
 • scalaz コードリーディング挫折 2 日
 • FSharpx.Iteratee のバグ潰し 1 日
 • FSharpx.Iteratee 追加実装 1 週間
まとめとか



• Iteratee とは
• FSharpx 内での実装
• Haskell や Scala では使われているらしい
• FSharpx は F#の勉強になるよ!
ご清聴ありがとう
 ございました

Mais conteúdo relacionado

Mais procurados

Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.kiki utagawa
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すAromaBlack
 
boost::shared_ptr tutorial
boost::shared_ptr tutorialboost::shared_ptr tutorial
boost::shared_ptr tutorialNU_Pan
 
Enumはデキる子 ~ case .Success(let value): ~
 Enumはデキる子 ~ case .Success(let value): ~ Enumはデキる子 ~ case .Success(let value): ~
Enumはデキる子 ~ case .Success(let value): ~Takaaki Tanaka
 
Scalaのオブジェクトの話
Scalaのオブジェクトの話Scalaのオブジェクトの話
Scalaのオブジェクトの話Yasuyuki Maeda
 
エキ Py 読書会02 2章前半
エキ Py 読書会02 2章前半エキ Py 読書会02 2章前半
エキ Py 読書会02 2章前半Tetsuya Morimoto
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Ransui Iso
 
Metaprogramming in JuliaLang
Metaprogramming in JuliaLangMetaprogramming in JuliaLang
Metaprogramming in JuliaLangYuichi Motoyama
 
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」Shin Ise
 
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Atsushi Odagiri
 
【CEDEC2018】ココが変わる!Unityの新しいエディタワークフロー
【CEDEC2018】ココが変わる!Unityの新しいエディタワークフロー【CEDEC2018】ココが変わる!Unityの新しいエディタワークフロー
【CEDEC2018】ココが変わる!Unityの新しいエディタワークフローUnity Technologies Japan K.K.
 
Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)Yoshiaki Shibutani
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書くHideyuki Tanaka
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Ransui Iso
 
【GTMF2018OSAKA】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【GTMF2018OSAKA】ハードウェアの性能を活かす為の、Unityの新しい3つの機能【GTMF2018OSAKA】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【GTMF2018OSAKA】ハードウェアの性能を活かす為の、Unityの新しい3つの機能Unity Technologies Japan K.K.
 
Introduction to cython
Introduction to cythonIntroduction to cython
Introduction to cythonAtsuo Ishimoto
 
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Relations Team
 

Mais procurados (20)

Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
 
boost::shared_ptr tutorial
boost::shared_ptr tutorialboost::shared_ptr tutorial
boost::shared_ptr tutorial
 
Enumはデキる子 ~ case .Success(let value): ~
 Enumはデキる子 ~ case .Success(let value): ~ Enumはデキる子 ~ case .Success(let value): ~
Enumはデキる子 ~ case .Success(let value): ~
 
Scalaのオブジェクトの話
Scalaのオブジェクトの話Scalaのオブジェクトの話
Scalaのオブジェクトの話
 
エキ Py 読書会02 2章前半
エキ Py 読書会02 2章前半エキ Py 読書会02 2章前半
エキ Py 読書会02 2章前半
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
 
Metaprogramming in JuliaLang
Metaprogramming in JuliaLangMetaprogramming in JuliaLang
Metaprogramming in JuliaLang
 
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
 
1221bot講習会
1221bot講習会1221bot講習会
1221bot講習会
 
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定
 
【CEDEC2018】ココが変わる!Unityの新しいエディタワークフロー
【CEDEC2018】ココが変わる!Unityの新しいエディタワークフロー【CEDEC2018】ココが変わる!Unityの新しいエディタワークフロー
【CEDEC2018】ココが変わる!Unityの新しいエディタワークフロー
 
boost tour 1.48.0 all
boost tour 1.48.0 allboost tour 1.48.0 all
boost tour 1.48.0 all
 
Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書く
 
Gensim
GensimGensim
Gensim
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
【GTMF2018OSAKA】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【GTMF2018OSAKA】ハードウェアの性能を活かす為の、Unityの新しい3つの機能【GTMF2018OSAKA】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【GTMF2018OSAKA】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
 
Introduction to cython
Introduction to cythonIntroduction to cython
Introduction to cython
 
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
 

Destaque

F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?pocketberserker
 
Play2の裏側
Play2の裏側Play2の裏側
Play2の裏側masahitojp
 
やさしいIteratee入門
やさしいIteratee入門やさしいIteratee入門
やさしいIteratee入門Takashi Kawachi
 
私とTDDと研究と(TDDBC横浜LT)
私とTDDと研究と(TDDBC横浜LT)私とTDDと研究と(TDDBC横浜LT)
私とTDDと研究と(TDDBC横浜LT)pocketberserker
 
言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析pocketberserker
 
Scala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LTScala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LTpocketberserker
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているpocketberserker
 
Erlangを触ってみた
Erlangを触ってみたErlangを触ってみた
Erlangを触ってみたYoichi Toyota
 
GHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについてGHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについてMitsutoshi Aoe
 
関数型軽い紹介
関数型軽い紹介関数型軽い紹介
関数型軽い紹介Daniel Perez
 
第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪Naoki Kitora
 
関数型言語初心者の俺がF#触ってみた
関数型言語初心者の俺がF#触ってみた関数型言語初心者の俺がF#触ってみた
関数型言語初心者の俺がF#触ってみたTakashi Nishisaki
 
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
 
F#のコンピュテーション式
F#のコンピュテーション式F#のコンピュテーション式
F#のコンピュテーション式pocketberserker
 

Destaque (20)

F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?
 
Play2の裏側
Play2の裏側Play2の裏側
Play2の裏側
 
やさしいIteratee入門
やさしいIteratee入門やさしいIteratee入門
やさしいIteratee入門
 
GParsの?Actor Model
GParsの?Actor ModelGParsの?Actor Model
GParsの?Actor Model
 
私とTDDと研究と(TDDBC横浜LT)
私とTDDと研究と(TDDBC横浜LT)私とTDDと研究と(TDDBC横浜LT)
私とTDDと研究と(TDDBC横浜LT)
 
言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析
 
Scala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LTScala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LT
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
 
Erlangを触ってみた
Erlangを触ってみたErlangを触ってみた
Erlangを触ってみた
 
Erlang
ErlangErlang
Erlang
 
GHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについてGHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについて
 
Yesod(at FPM2012)
Yesod(at FPM2012)Yesod(at FPM2012)
Yesod(at FPM2012)
 
関数型軽い紹介
関数型軽い紹介関数型軽い紹介
関数型軽い紹介
 
第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪
 
関数型言語初心者の俺がF#触ってみた
関数型言語初心者の俺がF#触ってみた関数型言語初心者の俺がF#触ってみた
関数型言語初心者の俺がF#触ってみた
 
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
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
JSer Class #1
JSer Class #1JSer Class #1
JSer Class #1
 
F#のコンピュテーション式
F#のコンピュテーション式F#のコンピュテーション式
F#のコンピュテーション式
 

Semelhante a FP習熟度レベルとFSharpxのIteratee

JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1Susisu
 
Hello World Python featuring GAE
Hello World Python featuring GAEHello World Python featuring GAE
Hello World Python featuring GAEMaito Kuwahara
 
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7Tetsuya Morimoto
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPAkira Takahashi
 
Favtile ~never write JS again~
Favtile ~never write JS again~Favtile ~never write JS again~
Favtile ~never write JS again~hanachin
 
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Norito Agetsuma
 
SPL fukuokaphp_1
SPL fukuokaphp_1SPL fukuokaphp_1
SPL fukuokaphp_1ichikaway
 
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 090510分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905Nobuaki Oshiro
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of PythonTakanori Suzuki
 
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 101010分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010Nobuaki Oshiro
 
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようYuya Takeyama
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101Nobuaki Oshiro
 
エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半Tetsuya Morimoto
 
「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 12Takanori Suzuki
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い sasezaki
 
Evolution Of Enumerator
Evolution Of EnumeratorEvolution Of Enumerator
Evolution Of EnumeratorAkinori Musha
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2Tomohiro Namba
 

Semelhante a FP習熟度レベルとFSharpxのIteratee (20)

JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
Hello World Python featuring GAE
Hello World Python featuring GAEHello World Python featuring GAE
Hello World Python featuring GAE
 
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 
Favtile ~never write JS again~
Favtile ~never write JS again~Favtile ~never write JS again~
Favtile ~never write JS again~
 
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015
 
SPL fukuokaphp_1
SPL fukuokaphp_1SPL fukuokaphp_1
SPL fukuokaphp_1
 
ALPSチュートリアル(4) Python入門
ALPSチュートリアル(4) Python入門ALPSチュートリアル(4) Python入門
ALPSチュートリアル(4) Python入門
 
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 090510分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 101010分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010
 
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
 
エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半
 
「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
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
 
Tokyor23 doradora09
Tokyor23 doradora09Tokyor23 doradora09
Tokyor23 doradora09
 
Evolution Of Enumerator
Evolution Of EnumeratorEvolution Of Enumerator
Evolution Of Enumerator
 
第1回python勉強会
第1回python勉強会第1回python勉強会
第1回python勉強会
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
 

FP習熟度レベルとFSharpxのIteratee