SlideShare a Scribd company logo
F#による Functional Programming
           入門

            bleis-tift


        December 22 2012
自己紹介




id:bleis-tift / @bleis
鈴鹿高専電子情報工学科卒業生
Microsoft MVP for Visual F#
いきなりですが質問です




Q1. プログラミングしたことありますか?
Q2. どんな言語を使いましたか?

C, C++, BASIC, Java, C#, PHP, Perl, Python,
Ruby, JavaScript, ...
授業だと大体こんなところでしょうか?
今日話すこと



授業ではあまり取り上げられないであろうタイプ
の言語である、

  関数型プログラミング言語
を取り上げ、関数プログラミングについて紹介し
ます。
その前に・
            ・・

手続型言語ってなんでしょうか?
  手続きを記述する
    処理のまとまりを「手続き」としてまとめる
    手続きを構成するのは「文」が基本
  状態を書き換える
    基本的に変数は書き換え可能
    単純なループは変数の書き換えがほぼ必須


  手続型言語は文中心かつ、
  書き換え可能な変数が必須
手続型言語に対し・
             ・・

関数型言語はざっくりこんな感じです。
  関数を記述する
    処理のまとまりを「関数」としてまとめる
    関数を構成するのは「式」
  状態の書き換えは局所化する
    基本的に変数は書き換え不可能
    変数の書き換えによらない繰り返し


    関数型言語は式中心
式と文の違い




式と文の違い、分かりますか?
  式は評価することで値になる
  文そのものは値を持たない
値が書けるところには式が書ける!
式と文の違い (文)
Java
int[] f(int x) {
  int[] res = new int[x];
  for (int i = 0; i < x; i++)
    res[i] = i * 2;
  return res;
}
int sum(int[] xs) { ... }
// これはもちろん可能
int total = sum(f(10));
// これは出来ない
int total = sum(
  int[] res = new int[x];
  for (int i = 0; i < x; i++)
    res[i] = i * 2;
  return res;
);
式と文の違い (式)
F#
let f x =
  let res = Array.zeroCreate x
  for i in 0..(x - 1) do
    res.[i] <- i * 2
  res
let sum xs = ...
// これはもちろん可能
let total = sum(f 10)
// これも可能!
let total =
  sum (
    let res = Array.zeroCreate 10
    for i in 0..(10 - 1) do
      res.[i] <- i * 2
    res
  )
式中心であることの利点




式を組み合わせてより大きく
 複雑な式を構築できる!
F#について

ちょっと休憩して、F#について。
   Visual Studio に標準搭載されている、
   マルチパラダイム言語
   (コアとなるパラダイムは関数型)
   .NET Framework 上で動作するため、
   .NET の資産を活かせる
   強い静的型付き言語
   インデントを文法に含む (軽量構文の場合)
   オープンソース
さっきのコードをもう一回見てみる


let f x =
  let res = Array.zeroCreate x
  for i in 0..(x - 1) do
    res.[i] <- i * 2 // 状態書き換えてる!
  res

状態書き換えない版
let f x =
  Array.init x ((*)2)

ループを自分で書く必要すらない!
→バグの抑制につながる
F#って静的型付き言語って言ったよね・ ?
                  ・・


今までのコード、型書いてません。
でも、型推論によってコンパイル時に型が付いて
いたのです!
// int を受け取って int[] を返す関数
// 「int -> int[]」と記述する
let f x =
  Array.init x ((*)2)

この関数にどうやって型が付いたのか見ていき
ます。
その前に




((*)2)って何!
((*)2) について

F#では、中置演算子を関数として扱える
2 * 4   // 8
(*) 2 4 // 8

そして、複数引数の関数に引数を「一部」与える
ことができる
let f x y = x * y
f 2 4 // 8
let g = f 2
g 4   // 8

つまり、((*)2) は「何かを 2 倍する関数」
型推論のステップ
    let f x =
      Array.init x ((*)2)

      1   Array.init は、int → (int → α) → α
                                         []
.     2   x は Array.init の第一引数として渡している
             x の型は int
      3   戻り値の型は Array.init の戻り値の型と同じ
.
             f の戻り値の型はα
                      []
      4   掛け算「*」の型は int → int → int
             ((*)2) は引数を一つ与えているので、int → int
             これを Array.init の第二引数として渡しているの
.            で、(int → α) のαは int

    全体として、f は「int → int ]
                      [ 」
型推論の利点




 型を書かなくても型が付く
→型チェックの恩恵が受けられる
ちょっと休憩




ここまでで何か質問ありますか?
ここからは型について



A か B か C のどれかを表す型が欲しくなったとき
どうしますか?
列挙型を使う?
Java の例
enum T { A, B, C }

これでどうや!
列挙型でダメな場合


列挙型は「A の時のみ必要な情報」を保持でき
ない
例えば、
   アンケートの項目「このイベントを何で知り
   ましたか?」
   Web サイト / Twitter / Facebook / その他
   その他の場合は理由が必要
これは列挙型ではうまくあらわせない・               ・・
どうしよう


列挙型とクラスでやる?
enum InfoSource {
  WebSite, Twitter, Facebook, Etc
}
class Answer {
  InfoSource source;
  String etc;
  ...
}
Etc 以外の時に etc が使われてしまうかもしれない
どうしよう・
                    ・・
クラス階層を作ってみる?
こうや!
interface InfoSource { }
enum WebSite implements InfoSource { Instance }
enum Twitter implements InfoSource { Instance }
enum Facebook implements InfoSource { Instance }
class Etc implements InfoSource {
  String etc;
}

    Etc 以外の時は etc が使えない!
    でも InfoSource を Etc として使うためには
    キャストが必要
    結局コンパイル時に解決できていない
    そこで Visitor ですよ!
Visitor
Visitor の導入
interface Visitor {
  void webSite(WebSite w);
  void twitter(Twitter t);
  void facebook(Facebook f);
  void etc(Etc e);
}
interface InfoSource { void accept(Visitor v); }
enum WebSite implements InfoSource {
  Instance;
  public void accept(Visitor v) { return v.webSite(this); }
}
enum Twitter implements InfoSource {
  Instance;
  public void accept(Visitor v) { return v.twitter(this); }
}
enum Facebook implements InfoSource {
  Instance;
  public void accept(Visitor v) { return v.facebook(this); }
}
class Etc implements InfoSource {
  String etc;
  public void accept(Visitor v) { return v.etc(this); }
}
やってられるかー!
そこで直和型ですよ!



F#の直和型 (判別共用体) を使えばこの通り
type InfoSource =
  | WebSite
  | Twitter
  | Facebook
  | Etc of string

すっきり!
使い方も簡単

match 式を使う
let toStr src =
  match src with
  | WebSite -> "Web サイト"
  | Twitter -> "Twitter"
  | Facebook -> "Facebook"
  | Etc etc -> "その他 (" + etc + ")"

function 式でも可
let toStr = function
| WebSite -> "Web サイト"
| Twitter -> "Twitter"
| Facebook -> "Facebook"
| Etc etc -> "その他 (" + etc + ")"
判別共用体のさらなる用途




ここまでは、列挙型に毛の生えたようなもの
ここまででも便利だが・
          ・・
判別共用体は、自分自身を参照することで更
に便利に!
情報系ではおそらく一度は実装する

二分木




これを実装してみましょう
二分木の実装

Java の場合
public class BinTree {
  final int value;
  BinTree left = null;
  BinTree right = null;
  public BinTree(int value) {
    this.value = value;
  }
}

F#の場合
type BinTree =
  | Leaf
  | Node of BinTree * int * BinTree
    //         ↑              ↑
二分探索木の探索
Java の場合
public boolean contains(int value) {
  if (value == this.value)
    return true;
  if (value < this.value && lelft != null)
    return left.contains(value);
  if (this.value < value && right != null)
    return right.contains(value);
  return false;
}

F#の場合
let rec contains   value = function
| Leaf -> false
| Node (l, v, r)   when v = value -> true
| Node (l, v, r)   when value < v -> contains value l
| Node (l, v, r)   when v < value -> contains value r
両者の違い



F#の実装の方が短い (Java よりも宣言的)
Java 版は null を使うため、
NullPointerException が起こりうるのに対し、
F#版は null を使わない
Java 版は二分木の操作は参照をやりくりする
必要があるのに対し、F#版はパターンマッ
チが使える
判別共用体は



再帰的なデータ構造を上手に扱える
  再帰的なデータ構造は思いのほか多い
  リスト、木、ファイルシステム、などなど
簡単に記述できる
  型を定義するハードルが低い (型が軽い)
取りこぼし




リストとリストの処理
高階関数 (関数が第一級の値)
少ないルールを組み合わせる
モナドとか
まとめ




文より式!
直和型 (判別共用体)!
F# ! F# !
Ad

More Related Content

What's hot (20)

C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
 
ClojurianからみたElixir
ClojurianからみたElixirClojurianからみたElixir
ClojurianからみたElixir
Kent Ohashi
 
yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話
bleis tift
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門
Yoshitaka Seo
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門
Eita Sugimoto
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
 
Scala
ScalaScala
Scala
Amir Payberah
 
F#の基礎(嘘)
F#の基礎(嘘)F#の基礎(嘘)
F#の基礎(嘘)
bleis tift
 
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
 
入門Transducers
入門Transducers入門Transducers
入門Transducers
sohta
 
Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)
Scott Wlaschin
 
.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能
TomomitsuKusaba
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
do_aki
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
Kimikazu Kato
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
do_aki
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
 
ドメイン駆動設計 at DDD.rb #5
ドメイン駆動設計 at DDD.rb #5ドメイン駆動設計 at DDD.rb #5
ドメイン駆動設計 at DDD.rb #5
啓 杉本
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
 
ClojurianからみたElixir
ClojurianからみたElixirClojurianからみたElixir
ClojurianからみたElixir
Kent Ohashi
 
yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話
bleis tift
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門
Yoshitaka Seo
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門
Eita Sugimoto
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
 
F#の基礎(嘘)
F#の基礎(嘘)F#の基礎(嘘)
F#の基礎(嘘)
bleis tift
 
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
 
入門Transducers
入門Transducers入門Transducers
入門Transducers
sohta
 
Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)
Scott Wlaschin
 
.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能
TomomitsuKusaba
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
do_aki
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
Kimikazu Kato
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
do_aki
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
 
ドメイン駆動設計 at DDD.rb #5
ドメイン駆動設計 at DDD.rb #5ドメイン駆動設計 at DDD.rb #5
ドメイン駆動設計 at DDD.rb #5
啓 杉本
 

Viewers also liked (20)

C#(VB)プログラマのためのF#入門
C#(VB)プログラマのためのF#入門C#(VB)プログラマのためのF#入門
C#(VB)プログラマのためのF#入門
bleis tift
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)
bleis tift
 
Better C#の脱却を目指して
Better C#の脱却を目指してBetter C#の脱却を目指して
Better C#の脱却を目指して
bleis tift
 
async/await不要論
async/await不要論async/await不要論
async/await不要論
bleis tift
 
F#事例発表
F#事例発表F#事例発表
F#事例発表
bleis tift
 
関数型言語のすすめ
関数型言語のすすめ関数型言語のすすめ
関数型言語のすすめ
bleis tift
 
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
bleis tift
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJava
bleis tift
 
本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!
本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!
本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!
慎一 古賀
 
どこでも使えるF sharp again pub
どこでも使えるF sharp again pubどこでも使えるF sharp again pub
どこでも使えるF sharp again pub
Masahiko Miyasaka
 
VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)
bleis tift
 
ぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLLぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLL
bleis tift
 
解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler
bleis tift
 
Xamarin.forms実践投入してみて
Xamarin.forms実践投入してみてXamarin.forms実践投入してみて
Xamarin.forms実践投入してみて
Masahiko Miyasaka
 
論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)
Lintaro Ina
 
『ポイッとヒーロー』のunity5移行事例
『ポイッとヒーロー』のunity5移行事例『ポイッとヒーロー』のunity5移行事例
『ポイッとヒーロー』のunity5移行事例
雄吾 加茂
 
Unityでlinqを使おう
Unityでlinqを使おうUnityでlinqを使おう
Unityでlinqを使おう
Yuuki Takada
 
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ良質なコードを高速に書くコツ
良質なコードを高速に書くコツ
Shunji Konishi
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
 
C#(VB)プログラマのためのF#入門
C#(VB)プログラマのためのF#入門C#(VB)プログラマのためのF#入門
C#(VB)プログラマのためのF#入門
bleis tift
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)
bleis tift
 
Better C#の脱却を目指して
Better C#の脱却を目指してBetter C#の脱却を目指して
Better C#の脱却を目指して
bleis tift
 
async/await不要論
async/await不要論async/await不要論
async/await不要論
bleis tift
 
F#事例発表
F#事例発表F#事例発表
F#事例発表
bleis tift
 
関数型言語のすすめ
関数型言語のすすめ関数型言語のすすめ
関数型言語のすすめ
bleis tift
 
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
bleis tift
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJava
bleis tift
 
本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!
本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!
本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!
慎一 古賀
 
どこでも使えるF sharp again pub
どこでも使えるF sharp again pubどこでも使えるF sharp again pub
どこでも使えるF sharp again pub
Masahiko Miyasaka
 
VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)
bleis tift
 
ぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLLぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLL
bleis tift
 
解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler
bleis tift
 
Xamarin.forms実践投入してみて
Xamarin.forms実践投入してみてXamarin.forms実践投入してみて
Xamarin.forms実践投入してみて
Masahiko Miyasaka
 
論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)
Lintaro Ina
 
『ポイッとヒーロー』のunity5移行事例
『ポイッとヒーロー』のunity5移行事例『ポイッとヒーロー』のunity5移行事例
『ポイッとヒーロー』のunity5移行事例
雄吾 加茂
 
Unityでlinqを使おう
Unityでlinqを使おうUnityでlinqを使おう
Unityでlinqを使おう
Yuuki Takada
 
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ良質なコードを高速に書くコツ
良質なコードを高速に書くコツ
Shunji Konishi
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
 
Ad

Similar to F#によるFunctional Programming入門 (20)

Swift らしい表現を目指そう #eventdots
Swift らしい表現を目指そう #eventdotsSwift らしい表現を目指そう #eventdots
Swift らしい表現を目指そう #eventdots
Tomohiro Kumagai
 
関数型プログラミング入門 for Matlab ユーザー
関数型プログラミング入門 for Matlab ユーザー関数型プログラミング入門 for Matlab ユーザー
関数型プログラミング入門 for Matlab ユーザー
Ichiro Maruta
 
ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】
株式会社ランチェスター
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
CHY72
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
Tomohiro Kumagai
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScript
bleis tift
 
Go conference 2017 Lightning talk
Go conference 2017 Lightning talkGo conference 2017 Lightning talk
Go conference 2017 Lightning talk
mokelab
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
Shinichi Kozake
 
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!仕事でも Groovy を使おう!
仕事でも Groovy を使おう!
Oda Shinsuke
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
和弘 井之上
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
 
言語処理系入門4
言語処理系入門4言語処理系入門4
言語処理系入門4
Kenta Hattori
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3
Kenta Hattori
 
Refactoring point of Kotlin application
Refactoring point of Kotlin applicationRefactoring point of Kotlin application
Refactoring point of Kotlin application
Recruit Lifestyle Co., Ltd.
 
Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理
Takuya Tsuchida
 
リテラルと型の話 #__swift__
リテラルと型の話 #__swift__リテラルと型の話 #__swift__
リテラルと型の話 #__swift__
Tomohiro Kumagai
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
Shinsuke Sugaya
 
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
Akira Takahashi
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
和弘 井之上
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
YOSHIKAWA Ryota
 
Swift らしい表現を目指そう #eventdots
Swift らしい表現を目指そう #eventdotsSwift らしい表現を目指そう #eventdots
Swift らしい表現を目指そう #eventdots
Tomohiro Kumagai
 
関数型プログラミング入門 for Matlab ユーザー
関数型プログラミング入門 for Matlab ユーザー関数型プログラミング入門 for Matlab ユーザー
関数型プログラミング入門 for Matlab ユーザー
Ichiro Maruta
 
ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】
株式会社ランチェスター
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
CHY72
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
Tomohiro Kumagai
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScript
bleis tift
 
Go conference 2017 Lightning talk
Go conference 2017 Lightning talkGo conference 2017 Lightning talk
Go conference 2017 Lightning talk
mokelab
 
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!仕事でも Groovy を使おう!
仕事でも Groovy を使おう!
Oda Shinsuke
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
和弘 井之上
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
 
言語処理系入門4
言語処理系入門4言語処理系入門4
言語処理系入門4
Kenta Hattori
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3
Kenta Hattori
 
Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理
Takuya Tsuchida
 
リテラルと型の話 #__swift__
リテラルと型の話 #__swift__リテラルと型の話 #__swift__
リテラルと型の話 #__swift__
Tomohiro Kumagai
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
Shinsuke Sugaya
 
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
Akira Takahashi
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
和弘 井之上
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
YOSHIKAWA Ryota
 
Ad

More from bleis tift (17)

PCさえあればいい。
PCさえあればいい。PCさえあればいい。
PCさえあればいい。
bleis tift
 
No more Legacy documents
No more Legacy documentsNo more Legacy documents
No more Legacy documents
bleis tift
 
効果の低いテストの話
効果の低いテストの話効果の低いテストの話
効果の低いテストの話
bleis tift
 
テストの自動化を考える前に
テストの自動化を考える前にテストの自動化を考える前に
テストの自動化を考える前に
bleis tift
 
札束でExcelを殴る
札束でExcelを殴る札束でExcelを殴る
札束でExcelを殴る
bleis tift
 
SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~
bleis tift
 
yield and return (poor English ver)
yield and return (poor English ver)yield and return (poor English ver)
yield and return (poor English ver)
bleis tift
 
現実(えくせる)と戦う話
現実(えくせる)と戦う話現実(えくせる)と戦う話
現実(えくせる)と戦う話
bleis tift
 
自分戦略
自分戦略自分戦略
自分戦略
bleis tift
 
F#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリF#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリ
bleis tift
 
SCMBC闇LT資料
SCMBC闇LT資料SCMBC闇LT資料
SCMBC闇LT資料
bleis tift
 
SCMBC Git入門セッション発表資料
SCMBC Git入門セッション発表資料SCMBC Git入門セッション発表資料
SCMBC Git入門セッション発表資料
bleis tift
 
輪るビングドラム.NET
輪るビングドラム.NET輪るビングドラム.NET
輪るビングドラム.NET
bleis tift
 
仕事で使うF#
仕事で使うF#仕事で使うF#
仕事で使うF#
bleis tift
 
SCM Boot Camp
SCM Boot CampSCM Boot Camp
SCM Boot Camp
bleis tift
 
Vim再入門
Vim再入門Vim再入門
Vim再入門
bleis tift
 
CIのその先へ
CIのその先へCIのその先へ
CIのその先へ
bleis tift
 
PCさえあればいい。
PCさえあればいい。PCさえあればいい。
PCさえあればいい。
bleis tift
 
No more Legacy documents
No more Legacy documentsNo more Legacy documents
No more Legacy documents
bleis tift
 
効果の低いテストの話
効果の低いテストの話効果の低いテストの話
効果の低いテストの話
bleis tift
 
テストの自動化を考える前に
テストの自動化を考える前にテストの自動化を考える前に
テストの自動化を考える前に
bleis tift
 
札束でExcelを殴る
札束でExcelを殴る札束でExcelを殴る
札束でExcelを殴る
bleis tift
 
SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~
bleis tift
 
yield and return (poor English ver)
yield and return (poor English ver)yield and return (poor English ver)
yield and return (poor English ver)
bleis tift
 
現実(えくせる)と戦う話
現実(えくせる)と戦う話現実(えくせる)と戦う話
現実(えくせる)と戦う話
bleis tift
 
F#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリF#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリ
bleis tift
 
SCMBC闇LT資料
SCMBC闇LT資料SCMBC闇LT資料
SCMBC闇LT資料
bleis tift
 
SCMBC Git入門セッション発表資料
SCMBC Git入門セッション発表資料SCMBC Git入門セッション発表資料
SCMBC Git入門セッション発表資料
bleis tift
 
輪るビングドラム.NET
輪るビングドラム.NET輪るビングドラム.NET
輪るビングドラム.NET
bleis tift
 
仕事で使うF#
仕事で使うF#仕事で使うF#
仕事で使うF#
bleis tift
 
CIのその先へ
CIのその先へCIのその先へ
CIのその先へ
bleis tift
 

F#によるFunctional Programming入門