SlideShare una empresa de Scribd logo
1 de 51
F#のコンピュテーション式
2014/03/29 #kyon_kao_wedding
@pocketberserker
まずはじめに
 きょんさん、かおりさん、おめでとうございます!
 Twitterで知り合って2か月後にSCMBC、TDDBCを開催し
たあのころが懐かしい…
お前誰よ
 中山 / なかやん / ペンギン / 残KEN / もみあげ
 どこにでもいるふつーの社会人
 Microsoft MVP For F# (2013/04/01 ~ 2014/03/31)
 2013/04~ ゲーム開発(新卒) -> 2013/11~ (SI)
 ぶれきょん共同図書室分室管理人
 他言語のライブラリを移植する日々
 Scala(z) / Haskell / C++ / Erlang とかにも興味あり
本日のお題
 コンピュテーション式とは
 コンピュテーション式の実装方針
話さないこと
 コンピュテーション式の変換規則
 カスタムオペレーターの詳細
 モナドとは
注意
 個人的意見強め
 他のF#erは異なる意見である可能性があります
結論を一言で
結論を一言で
 コンピュテーション式はモナド用の構文を意識している部
分がある
F#とは
 マルチパラダイム
 CLI準拠の実行環境上で動作
 オープンソース(Apache 2.0)
 コミュニティはだいたいゆるふわ
コンピュテーション式
 順番に配列したり結合できる計算を記述するのに便利な構
文を提供するもの
 変換規則に従って式変形を行う
標準提供されているもの
 seq
 シーケンス
 seq<‘a>
 async
 非同期計算
 Async<‘a>
 query
 データセット
 seq<‘a>, IEnumerable<‘a>, IQueryable<‘a>
定義したら使える構文一覧
 { let hoge = … in … }
 { let! hoge = … in … }
 { return hoge }
 { return! hoge }
 { yield hoge }
 { yield! hoge }
 { use hoge = … in … }
定義したら使える構文一覧
 { use! hoge = … in … }
 { If pred then … else … }
 { If pred then … }
 { while pred do … }
 { for … in … do … }
 { try … with … }
 { try … finally … }
 その他いくつか
変換後に出現するメソッド
Return, ReturnFrom, Bind, Yield, YieldFrom, Using, Zero,
Combine, For, While, TryWith, TryFinally, Source, Run,
Delay, Quote, Join, GroupJoin
用語的な話
なんでコンピュテーション式?
 初期は「計算式」と呼ばれていたらしい…?
 私がF#を学び始めた頃まで
 日本コニュニティが改善案を検討して要望したとか
 経緯は他のF#erにお尋ねください
キーワード名
 基本はモナドを意識したキーワード or F#のキーワード
 名前の意図は実装依存
 仕様には変換規則しか書かれていない
 計算文脈を慎重に考える必要がある
 モナド的な解釈?C#のキーワード的な解釈?独自?
 モナド用と思われていることが多いため、明記してお
かないと「モナド則満たしてない!」とか飛んできか
ねない
実装とか
組込コンピュテーション式が少ない
 構文に関する考えは人それぞれ
 同じ型用のコンピュテーション式でも実装は様々考えられ
る
 Option(Maybe)型だけで少なくとも4つの異なる実装
がNuGet上のライブラリに存在する
 Basis.Coreのものが実用的
 構文を絞っても問題なさそうなもののみ実装した…?
どの構文でコンパイルエラーなのか
 コンピュテーション式は変換規則にしたがって展開される
 紙とペンで1つずつ式変換を記述してください
 そのうち型のあわない部分が見つかります
 ペア作業おすすめ
高階ことりちゃんと休憩タイム
コンピュテーション式を
定義したくなったかな?
コンピュテーション式実装
1. 必要な構文を洗い出す
2. Builderクラスを用意する
3. 変換規則に現れるメソッドを定義する
4. オブジェクトを生成する
コンピュテーション式の実装方針
コンピュテーション式の実装方針
 do記法, for式のエミュレーション
 データセットの計算を解りやすく
 計算を制御する
1. do構文, for式のエミュレーション
1. do構文, for式のエミュレーション
 一番よく使われるパターン
 HaskellのdoもしくはScalaのforのような動作
 モナド則(単位元律、結合律)を満たす範囲で実装
必要なもの
 Return(or Yield), Bindメソッド
 計算が単位元律、結合律を満たすこと
 Zeroメソッドも定義しておいたほうが無難
 ZeroがないとIf then が使えない
 Haskellのguard関数、Scalaのfor式内でのifの代替
 利便性を考えてReturnFromを実装するが多い
例: Option(Maybe、Optional)型用に
定義
type OptionBuilder() =
member this.Return(x) = Some x
member this.ReturnFrom(x: _ option) = x
// Someならfを適用してSomeに包む、Noneならそのまま
member this.Bind(x, f) = Option.bind f x
member this.Zero() = None
let option = OptionBuilder()
使ってみる
let div x y =
option {
let! x = x
let! y = y
if y <= 0 then return x / y
}
div (Some 4) (Some 2) // = (Some 2)
div (Some 1) (Some 0) // = None
採用基準
 シンプルな実装にしたい
 多言語から移植したい
2. データセットの計算をわかりやすく
2. データセットの計算をわかりやすく
 データ操作用途に使うことが多い(?)
 データセットを操作しやすい形に実装
 処理を連想しやすい独自構文を追加していく
必要なもの
 Yield, YieldFrom, For
 必要なカスタムオペレーターを定義
補足
 カスタムオペレーターを定義した場合、制御構文が使えな
くなる
 If, match, try with, try finally
 F# 3.1時点での仕様
採用基準
 計算それぞれに名前をつけたい
3. 計算を制御する
3. 計算を制御する
 呼び出すキーワードによって細かい制御を行う
 エミュレーションではない独自構文として使う
必要なもの
 カスタムオペレータ、Quote以外
 場合によってはStateか継続の知識が必要
例: Basis.Core.OptionBuilder
 https://github.com/BasisLib/Basis.Core/blob/v1.1.3/Bas
is.Core/Option.fs#L23
 制御構文内でreturn, return!を使用するとそれ以降の計算
を行わない
 while内でreturnを扱える
 returnとyieldをC#的な意図で使える
例: Basis.Core.OptionBuilder
let x = 2
option {
if true then return x
return! None
}
//よくあるOptionBuilderだと None
// Basis.Coreだと Some 2
補足
 カスタムオペレーターは使用できない
 Stateを用いた実装はパフォーマンスが若干落ちる
 内部でのパターンマッチ回数が多くなりやすい
 継続を用いた実装はラップしにくい
 慣れたらそうでもないという噂はある
 機能が豊富な分重量級
キーワードごとに計算を制御する理由
 式変換で実装される以上、どう足掻いてもメソッドは実行される
 option { if true then return x; return y } で (Some y) になってし
まう
 do構文やfor式では発生しない問題(だと思う)
 Returnを呼び出したかどうかの状態を持っておく必要がある
 でもBuilder内に状態を持ちたくない
 シンタックスハイライトが消えたりする
 ので、Stateか継続を使う
Basis.Coreの今後
同じ型についてコンピュテーション式を
複数提供
 v1.1.3はStateを用いたコンピュテーション式のみ提供だった
 v2.0では軽量版、State版、Cont版を提供予定
 軽量版はreturn, bind程度をサポート予定
 用途によって使い分ける
 モジュールを分けて提供(ComputationExpr.State.Optionとか?)
まとめ
 コンピュテーション式はモナド用の構文を意識している部
分がある
 すごいゆるふわF#学ぼう!
おまけ
コンピュテーション式の拡張方法1
 コンピュテーション式を構成するBuilderは(OOP的な意
味での)クラス
 クラスなので拡張メソッド、オーバーロードを適用できる
 ので、既存のコンピュテーション式に介入できないことも
ない
 実際にやっているところを見たことはない
コンピュテーション式の拡張方法2
 Builderのメソッドはpublic
 つまりラップして新たなBuilderを定義すれば良い
参考資料
 詳説コンピュテーション式
 http://bleis-tift.hatenablog.com/entry/computation-
expression
 変換規則に関する一番詳しい日本語解説記事
 The F# 3.0 Language Specification
 http://research.microsoft.com/en-
us/um/cambridge/projects/fsharp/manual/spec.html#_Toc3
35818835
 上記URLはコンピュテーション式への直リンク
参考資料
 圏論の基礎 – 丸善出版 2012/07
 モナド則の名前とか
 HaskellのdoとScalaのfor式とEitherとMonadPlus – Scala
とか・・・
 http://d.hatena.ne.jp/xuwei/20130517/1368814058
 HaskellのguardとScalaのfor式を調べていたらヒット
した
参考資料
 高階ことりちゃん
 http://tkotori.github.io/
 画像のライセンスはCC-BY-SA 3.0

Más contenido relacionado

La actualidad más candente

コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話torisoup
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースHajime Yanagawa
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonadKouji Matsui
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpkyon mm
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計Tadayoshi Sato
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣Masahiro Nishimi
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解Koji Terada
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ増田 亨
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座bleis tift
 
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計増田 亨
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門増田 亨
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかShunsukeNakamura17
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~Nobuhisa Koizumi
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎信之 岩永
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeNA
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐりKazuyuki TAKASE
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介torisoup
 

La actualidad más candente (20)

コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
Marp入門
Marp入門Marp入門
Marp入門
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonad
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
 
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
 

Destacado

Better C#の脱却を目指して
Better C#の脱却を目指してBetter C#の脱却を目指して
Better C#の脱却を目指してbleis tift
 
F#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリF#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリbleis tift
 
言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析pocketberserker
 
私とTDDと研究と(TDDBC横浜LT)
私とTDDと研究と(TDDBC横浜LT)私とTDDと研究と(TDDBC横浜LT)
私とTDDと研究と(TDDBC横浜LT)pocketberserker
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているpocketberserker
 
Scala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LTScala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LTpocketberserker
 
20151103 アーバンデータチャレンジ ハッカソン in 奈良先端科学技術大学院大学
20151103 アーバンデータチャレンジ ハッカソン in 奈良先端科学技術大学院大学20151103 アーバンデータチャレンジ ハッカソン in 奈良先端科学技術大学院大学
20151103 アーバンデータチャレンジ ハッカソン in 奈良先端科学技術大学院大学Takuya Sato
 
F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?pocketberserker
 
FP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIterateeFP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIterateepocketberserker
 
VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)bleis tift
 
節電に対する人々の意識~東日本大震災が与えた影響~
節電に対する人々の意識~東日本大震災が与えた影響~節電に対する人々の意識~東日本大震災が与えた影響~
節電に対する人々の意識~東日本大震災が与えた影響~Analytics2014
 
JST科学技術文献データのネットワーク分析-シソーラス、組織、分野の分析を通じて
JST科学技術文献データのネットワーク分析-シソーラス、組織、分野の分析を通じてJST科学技術文献データのネットワーク分析-シソーラス、組織、分野の分析を通じて
JST科学技術文献データのネットワーク分析-シソーラス、組織、分野の分析を通じてAnalytics2014
 
async/await不要論
async/await不要論async/await不要論
async/await不要論bleis tift
 
IIBMP2016 深層生成モデルによる表現学習
IIBMP2016 深層生成モデルによる表現学習IIBMP2016 深層生成モデルによる表現学習
IIBMP2016 深層生成モデルによる表現学習Preferred Networks
 
画像キャプションの自動生成
画像キャプションの自動生成画像キャプションの自動生成
画像キャプションの自動生成Yoshitaka Ushiku
 

Destacado (19)

Better C#の脱却を目指して
Better C#の脱却を目指してBetter C#の脱却を目指して
Better C#の脱却を目指して
 
F#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリF#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリ
 
言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析
 
私とTDDと研究と(TDDBC横浜LT)
私とTDDと研究と(TDDBC横浜LT)私とTDDと研究と(TDDBC横浜LT)
私とTDDと研究と(TDDBC横浜LT)
 
GParsの?Actor Model
GParsの?Actor ModelGParsの?Actor Model
GParsの?Actor Model
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
 
Scala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LTScala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LT
 
20151103 アーバンデータチャレンジ ハッカソン in 奈良先端科学技術大学院大学
20151103 アーバンデータチャレンジ ハッカソン in 奈良先端科学技術大学院大学20151103 アーバンデータチャレンジ ハッカソン in 奈良先端科学技術大学院大学
20151103 アーバンデータチャレンジ ハッカソン in 奈良先端科学技術大学院大学
 
F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?
 
FP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIterateeFP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIteratee
 
TDDBC東京 1.6 LT
TDDBC東京 1.6 LTTDDBC東京 1.6 LT
TDDBC東京 1.6 LT
 
VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)
 
TDDを研ぎ究める
TDDを研ぎ究めるTDDを研ぎ究める
TDDを研ぎ究める
 
節電に対する人々の意識~東日本大震災が与えた影響~
節電に対する人々の意識~東日本大震災が与えた影響~節電に対する人々の意識~東日本大震災が与えた影響~
節電に対する人々の意識~東日本大震災が与えた影響~
 
JST科学技術文献データのネットワーク分析-シソーラス、組織、分野の分析を通じて
JST科学技術文献データのネットワーク分析-シソーラス、組織、分野の分析を通じてJST科学技術文献データのネットワーク分析-シソーラス、組織、分野の分析を通じて
JST科学技術文献データのネットワーク分析-シソーラス、組織、分野の分析を通じて
 
async/await不要論
async/await不要論async/await不要論
async/await不要論
 
IIBMP2016 深層生成モデルによる表現学習
IIBMP2016 深層生成モデルによる表現学習IIBMP2016 深層生成モデルによる表現学習
IIBMP2016 深層生成モデルによる表現学習
 
画像キャプションの自動生成
画像キャプションの自動生成画像キャプションの自動生成
画像キャプションの自動生成
 
深層学習による自然言語処理の研究動向
深層学習による自然言語処理の研究動向深層学習による自然言語処理の研究動向
深層学習による自然言語処理の研究動向
 

Similar a F#のコンピュテーション式

関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013Esehara Shigeo
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話simotin13 Miyazaki
 
開発から見たWindowsの国際化機能
開発から見たWindowsの国際化機能開発から見たWindowsの国際化機能
開発から見たWindowsの国際化機能Tadahiro Ishisaka
 
ここからはじめるAction Script 3.0 入門前
ここからはじめるAction Script 3.0 入門前ここからはじめるAction Script 3.0 入門前
ここからはじめるAction Script 3.0 入門前Yusuke Kamo
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)bleis tift
 
A Machine Learning Framework for Programming by Example
A Machine Learning Framework for Programming by ExampleA Machine Learning Framework for Programming by Example
A Machine Learning Framework for Programming by ExampleKoji Matsuda
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会Yuji Otani
 
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行monglee
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
使い捨て python コードの書き方
使い捨て python コードの書き方使い捨て python コードの書き方
使い捨て python コードの書き方Sho Shimauchi
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライドkoturn 0;
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワークTakuya Sato
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門Yoshitaka Seo
 
ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用nishio
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみてKota Mizushima
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJavableis tift
 
Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Takuya Tsuchida
 
Eclipse modeling 勉強会 dslについて
Eclipse modeling 勉強会 dslについてEclipse modeling 勉強会 dslについて
Eclipse modeling 勉強会 dslについてAkira Tanaka
 
今日からはじめるHTML5 ver.2012
今日からはじめるHTML5 ver.2012今日からはじめるHTML5 ver.2012
今日からはじめるHTML5 ver.2012Yasuhito Yabe
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 

Similar a F#のコンピュテーション式 (20)

関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
 
開発から見たWindowsの国際化機能
開発から見たWindowsの国際化機能開発から見たWindowsの国際化機能
開発から見たWindowsの国際化機能
 
ここからはじめるAction Script 3.0 入門前
ここからはじめるAction Script 3.0 入門前ここからはじめるAction Script 3.0 入門前
ここからはじめるAction Script 3.0 入門前
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)
 
A Machine Learning Framework for Programming by Example
A Machine Learning Framework for Programming by ExampleA Machine Learning Framework for Programming by Example
A Machine Learning Framework for Programming by Example
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会
 
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
使い捨て python コードの書き方
使い捨て python コードの書き方使い捨て python コードの書き方
使い捨て python コードの書き方
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワーク
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門
 
ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJava
 
Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理
 
Eclipse modeling 勉強会 dslについて
Eclipse modeling 勉強会 dslについてEclipse modeling 勉強会 dslについて
Eclipse modeling 勉強会 dslについて
 
今日からはじめるHTML5 ver.2012
今日からはじめるHTML5 ver.2012今日からはじめるHTML5 ver.2012
今日からはじめるHTML5 ver.2012
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 

F#のコンピュテーション式