SlideShare a Scribd company logo
λ
functional
presented by
 @s_kozake
map / filter / foldl / foldr
in
こわくないよ




たのしい高階関数
          λ
                発表をする
          ▲




               資料をつくる
              資料をあきらめる
たのしい高階関数 λ  



目的
本勉強会の趣旨




   本セッションは高階関数入門です
   関数型言語の視野を拡げ、たのしく
   使っていくことを目的としております。
つまりですね
たのしい高階関数 λ  



目的
本勉強会の趣旨




   本セッションは高階関数入門です
   関数型言語の視野を拡げ、たのしく
   使っていくことを目的としております。
大事なことなので
2回いいました
たのしい高階関数 λ  



注意事項
たのしい高階関数 λ  




関数型言語は怖いイメージがあるみたいですが
たのしい高階関数 λ  




     当セッションはイージーモードです。
たのしい高階関数 λ  




       モナド / ファンクタ / 遅延評価 / 圏論 / 論証


                ダメ。ゼッタイ。
               「みんなやってる」なんて理由にならない
プログラマたちは ぜんめつしました。




このような悲劇を繰り返さないためにもね
たのしく
学びましょう~
たのしい高階関数 λ  




自己紹介
   Java    ★★☆
   Scala ☆☆☆
   Haskell ☆☆☆


   そろそろ Scala で仕事したいです。


   アストルティア
   Twitter@s_kozake
たのしい高階関数 λ  



Agenda
                 高階関数ってなに?


                     高階関数を学ぶメリット


                 リストを扱う高階関数


               まとめ
たのしい高階関数 λ  



Agenda
                 高階関数ってなに?


                     高階関数を学ぶメリット


                 リストを扱う高階関数


               まとめ
たのしい高階関数 λ  



高階関数ってなに?

   引数として関数を取ったり、
   返り値として関数を返したりする関数

   関数型言語では、
   関数がファーストクラスオブジェクト
   として扱える。
たのしい高階関数 λ  



高階関数ってなに?

   ファーストクラスオブジェクトとは

   ・無名のリテラルとして表現可能
   ・変数に格納可能
   ・データ構造への組み込みが可能
   ・プロシージャや関数のパラメータとして渡すことができる
   ・プロシージャや関数の戻り値として返すことができる
たのしい高階関数 λ  



高階関数ってなに?

   def twice(f:(Int => Int))(x:Int):Int = f(f(x))
たのしい高階関数 λ  



高階関数ってなに?

   def twice(f:(Int => Int))(x:Int):Int = f(f(x))

関数 twice は
Int 型の引数を受け取り Int 型の値を返す関数 f
を受け取り、
Int 型の引数を受け取り Int 型の値を返す関数
を返す関数
たのしい高階関数 λ  



高階関数ってなに?

   def twice(f:(Int => Int))(x:Int):Int = f(f(x))
   def add1(x:Int) = x + 1

   > val add2 = twice(add1)(_)
   add2: Int => Int = <function1>

   > add2(3)
   res1: Int = 5
たのしい高階関数 λ  



高階関数ってなに?

   def twice(f:(Int => Int))(x:Int):Int = f(f(x))
   def add1(x:Int) = x + 1
                                  Int 型の引数を受け取り
                                  Int 型の値を返す関数
   > val add2 = twice(add1)(_)
   add2: Int => Int = <function1>
                   Int 型の引数を受け取り
   > add2(3)       Int 型の値を返す関数
   res1: Int = 5
たのしい高階関数 λ  



高階関数ってなに?

   def twice(f:(Int => Int))(x:Int):Int = f(f(x))
   def add1(x:Int) = x + 1

   > val add2 = twice(add1)(_)
   add2: Int => Int = <function1>

   > add2(3) = twice(add1)(3) = add1(add1(3))
   res1: Int = 5
たのしい高階関数 λ  



Agenda
                 高階関数ってなに?


                     高階関数を学ぶメリット


                 リストを扱う高階関数


               まとめ
たのしい高階関数 λ  



高階関数を学ぶメリット
          処理の再利用の行いやすさ
          処理の再利用の行いやすさ
          パターンとしての高階関数
          パターンとしての高階関数
たのしい高階関数 λ  



高階関数を学ぶメリット
          処理の再利用の行いやすさ
          処理の再利用の行いやすさ
          パターンとしての高階関数
          パターンとしての高階関数
たのしい高階関数 λ  



高階関数を学ぶメリット


               例えば、ある関数 a の大部分が
      関数 a     共通処理で、一部が個別処理の場合

     共通処理
               例 ) ファイルの Open/Close
                 トランザクションの Begin/End
     個別処理        リトライ処理
                  Tree の走査
     共通処理
たのしい高階関数 λ  



高階関数を学ぶメリット


                 ● 値渡しによる処理の分岐
     関数 a(x)

     共通処理        ・個別処理が増える度に、
                  関数の処理が増大する
    if(x == 1)
       個別処理 1    ・関数の引数に制御情報を渡している
    else          =制御結合
       個別処理 2

     共通処理
たのしい高階関数 λ  



高階関数を学ぶメリット

抽象クラス A
                 ● 個別処理の抽象化
     メソッド a      ( template method パターン)
     共通処理
                 ・処理毎にクラスが増える
   Call メソッド b

     共通処理



     抽象メソッド b
たのしい高階関数 λ  



高階関数を学ぶメリット


                ● 関数渡しによる処理の再利用
      関数 a(f)
                ・個別処理が増えても
     共通処理
                 関数本体が複雑にならない

     個別処理 f     ・関数を値として扱える
                 =データ結合
     共通処理
たのしい高階関数 λ  



高階関数を学ぶメリット


                  関数を組み合わせて新しい関数を
     関数 a(f)(x)   作るのも容易

     共通処理
                  +   個別処理 11
                      個別処理      =   関数 a1(x)


     個別処理 f       +   個別処理 22
                      個別処理      =   関数 a2(x)

     共通処理
                  +   個別処理 33
                      個別処理      =   関数 a(x)
ん?
インターフェース渡し
があるじゃん!
たのしい高階関数 λ  



高階関数を学ぶメリット
  例えば、あるリストの値を 2 倍した結果、
  10 以上のものを抜き出して全部足した値を求める場合。



      list.map(_ * 2).filter(_ >= 10).reduce(_ + _)



      foldr (+) 0 . filter (>=10) . map (*2) $ list
たのしい高階関数 λ  



高階関数を学ぶメリット



   list.map(new Func1<Integer, Integer>() {
       public Integer apply(Integer a) { return a * 2;}

   }).filter(new Func1<Integer, Boolean>() {
       public Boolean apply(Integer a) { return a >= 10;}

   }).reduce(new Func2<Integer, Integer, Integer>() {
       public Integer apply(Integer a, Integer b) { return a + b; }
   });
やってられるか~!!
たのしい高階関数 λ  



高階関数を学ぶメリット
          処理の再利用の行いやすさ
          処理の再利用の行いやすさ

  ・高階関数は関数を引数に渡せるので、
   処理の再利用が行いやすい

  ・但し、型推論、ラムダ式など、手軽に関数を扱える
   言語サポートが備わっていることが重要
たのしい高階関数 λ  



高階関数を学ぶメリット
          処理の再利用の行いやすさ
          処理の再利用の行いやすさ
          パターンとしての高階関数
          パターンとしての高階関数
たのしい高階関数 λ  



高階関数を学ぶメリット
  例えば、リストの全ての要素に関数を写す関数は map



      List(1,2,3).map(_ * 2)



     map (*2) [1,2,3]

     JavaScript

     [1,2,3].map(function(a) { return a * 2 })
たのしい高階関数 λ  



高階関数を学ぶメリット
  例えば、 Scala の flatMap はモナドの bind と分かれば
  以下の動作が容易に推測できる。


   > List(1,2,3).flatMap(x => List(x*2))
   res0: List[Int] = List(2, 4, 6)

   > Some(1).flatMap(x => Some(x*2))
   res1: Option[Int] = Some(2)
たのしい高階関数 λ  



高階関数を学ぶメリット
          パターンとしての高階関数
          パターンとしての高階関数

  ・関数型言語にはパターンがある。

  ・パターンを覚えれば、他の関数型言語でも応用が利く。
たのしい高階関数 λ  



Agenda
                 高階関数ってなに?


                     高階関数を学ぶメリット


                 リストを扱う高階関数


               まとめ
たのしい高階関数 λ  



リストを扱う高階関数
               map 関数
               map 関数
               filter 関数
                filter 関数

               畳込み関数
               畳込み関数

・神は言われた。「リストあれ」

・リストと関数型言語は関連が深い

・ Java やってて「あれ欲しい」は
 たいていリストの高階関数
たのしい高階関数 λ  



リストのおさらい

    0 :: 1 :: 2 :: 3 :: Nil


    0 : 1 : 2 : 3 : []

                                        []

                0        1     2   3


               ヘッダ            テイル ラスト   Nil
たのしい高階関数 λ  



リストのおさらい

   つまりですね
たのしい高階関数 λ  



リストのおさらい

   こんなイメージ




   ヘッダ         テイル
                     ラスト   Nil
たのしい高階関数 λ  



リストを扱う高階関数
               map 関数
               map 関数
               filter 関数
                filter 関数

               畳込み関数
               畳込み関数
たのしい高階関数 λ  



リストを扱う高階関数

   map 関数のイメージ

     [1,2,3,4 ・・ ,n]
                map f

     [f(1), f(2), f(3), f(4) ・・ ,f(n)]

   関数 f をリストに写す( map over )
たのしい高階関数 λ  



リストを扱う高階関数
   こういう風に使います

     let ベホマラー = map ベホイミ
     let ルカナン = map ルカニ

     let スクルト = map スカラ
たのしい高階関数 λ  



リストを扱う高階関数

   map 関数の例


     > map (x -> x * 2) [1,2,3]
     [2,4,6]

     > map (x -> "hoge" ++ show(x)) [1,2,3]
     ["hoge1","hoge2","hoge3"]
たのしい高階関数 λ  



リストを扱う高階関数

   map 関数の実装


       map :: (a -> b) -> [a] -> [b]
       map _ [] = []
       map f (x:xs) = f x : map f xs
          ヘッダ テイル
たのしい高階関数 λ  



リストを扱う高階関数

   map 関数の実装


      def map[B, That](f: A => B)
                        (implicit bf: CanBuildFrom[Repr, B, That])
                        : That = {
        val b = bf(repr)
        b.sizeHint(this)
        for (x <- this) b += f(x)
        b.result
      }
たのしい高階関数 λ  



リストを扱う高階関数

   map 関数の実装(簡略化)


      def map[B, That](f: A => B)
        def map[A, B](f: A => Bbf:List[B] = {
                         (implicit ): CanBuildFrom[Repr, B, That])
           val b = new :ListBuffer[B]()
                           That = {
         val b = bf(repr)
           b.sizeHint(this)
         b.sizeHint(this) buff += f(x)
           for (x <- this)
         for (x <- this) b += f(x)
           b.result
        }b.result
      }
たのしい高階関数 λ  



リストを扱う高階関数
               map 関数
               map 関数
               filter 関数
                filter 関数

               畳込み関数
               畳込み関数
たのしい高階関数 λ  



リストを扱う高階関数

   filter 関数のイメージ

     [1,2,3,4 ・・ ,n]

                   filter (x => x < 4)

     [1,2,3]

   関数 f で要素を篩いに掛ける
たのしい高階関数 λ  



リストを扱う高階関数
   こういう時に使います ゲームしばり無視していますが。。

  let レベル 5 デス = filter (not . is レベル 5)
たのしい高階関数 λ  



リストを扱う高階関数

   filter 関数の例


  > filter (x -> not(x `mod` 5 == 0)) [3,4,5,10,12]
  [3,4,12]
たのしい高階関数 λ  



リストを扱う高階関数

   filter 関数の実装


     filter :: (a -> Bool) -> [a] -> [a]
     filter _pred []    = []
     filter pred (x:xs)
       | pred x         = x : filter pred xs
       | otherwise      = filter pred xs
たのしい高階関数 λ  



リストを扱う高階関数

   filter 関数の実装


     def filter(p: A => Boolean): Repr = {
       val b = newBuilder
       for (x <- this)
           if (p(x)) b += x
       b.result
     }
たのしい高階関数 λ  



リストを扱う高階関数
               map 関数
               map 関数
               filter 関数
                filter 関数

               畳込み関数
               畳込み関数
たのしい高階関数 λ  



リストを扱う高階関数
   foldl / foldr 関数のイメージ

  foldl f 0 [1,2,3,4]   foldr f 0 [1,2,3,4]
               f                f
            f     4        1        f
         f     3                 2     f
     f      2                       3     f
  0      1                             4    0
   関数 f でリストを畳み込んで単一の値を返す。
   左からと右からの畳み込み関数がある。
たのしい高階関数 λ  



   一応やっときます
たのしい高階関数 λ  



   右も左もないですが



         +     +       +   +

                   =
たのしい高階関数 λ  



リストを扱う高階関数

   foldl / foldr 関数の例


     > let add x y = x + y
     > foldl add 0 [1,2,3,4]
     10
     > foldr add 0 [1,2,3,4]
     10
たのしい高階関数 λ  



リストを扱う高階関数

   foldl / foldr 関数の例


     > let add x y = x + y
     > foldl add 0 [1,2,3,4]
     = add(add(add(add(0, 1),   2), 3), 4)
     = add(add(add(1, 2), 3),   4)
     = add(add(3, 3), 4)
     = add(6, 4)
     =10

     > foldr add 0 [1,2,3,4]
     10
たのしい高階関数 λ  



リストを扱う高階関数

   foldl / foldr 関数の例

     > let add x y = x + y
     > foldl add 0 [1,2,3,4]
     10
     >   foldr add 0 [1,2,3,4]
     =   add(1, add(2, add(3, add(4, 0))))
     =   add(1, add(2, add(3, 4)))
     =   add(1, add(2, 7))
     =   add(1, 9)
     =   10
たのしい高階関数 λ  



リストを扱う高階関数

   foldr 関数の実装


     foldr :: (a -> b -> b) -> b -> [a] -> b
     foldr k z = go
               where
                 go []     = z
                 go (y:ys) = y `k` go ys
たのしい高階関数 λ  



リストを扱う高階関数

   foldr 関数の実装


     foldr :: (a -> b -> b) -> b -> [a] -> b
     foldr k z = go
               where
                 go []     = z
                 go (y:ys) = y `k` go ys


     foldr k z [] = z
     foldr k z (y:ys) = k y (foldr k z ys)
たのしい高階関数 λ  



リストを扱う高階関数

   foldl 関数の実装


     foldl :: (a -> b -> a) -> a -> [b] -> a
     foldl f z0 xs0 = lgo z0 xs0
                  where
                     lgo z []     = z
                     lgo z (x:xs) = lgo (f z x) xs
たのしい高階関数 λ  



リストを扱う高階関数

   foldl 関数の実装


     foldl :: (a -> b -> a) -> a -> [b] -> a
     foldl f z0 xs0 = lgo z0 xs0
                  where
                     lgo z []     = z
                     lgo z (x:xs) = lgo (f z x) xs


     foldl f z [] = z
     foldl f z (x:xs) = foldl f (f z x) xs
たのしい高階関数 λ  



リストを扱う高階関数

   foldLeft 関数の実装 (Scala)


     def foldLeft[B](z: B)(f: (B, A) => B): B = {
       var acc = z
       var these = this
       while (!these.isEmpty) {
           acc = f(acc, these.head)
           these = these.tail
       }
       acc
     }
たのしい高階関数 λ  



リストを扱う高階関数

   foldRight 関数の実装 (Scala)


     def foldRight[B](z: B)(f: (A, B) => B): B =
       if (this.isEmpty) z
       else f(head, tail.foldRight(z)(f))
たのしい高階関数 λ  



リストを扱う高階関数

   Scala の foldRight 関数の注意点


     scala> (1 to 10000).toList.foldLeft(0)(_ + _)
     res0: Int = 50005000

     scala> (1 to 10000).toList.foldRight(0)(_ + _)
     java.lang.StackOverflowError
たのしい高階関数 λ  



リストを扱う高階関数

   Range の場合は大丈夫


     scala> (1 to 10000).foldLeft(0)(_ + _)
     res0: Int = 50005000

     scala> (1 to 10000).foldRight(0)(_ + _)
     res1: Int = 50005000
たのしい高階関数 λ  



リストを扱う高階関数

   Range の foldRight 関数の実装


     def foldRight[B](z: B)(op: (A, B) => B): B =
       reversed.foldLeft(z)((x, y) => op(y, x))


    まさかの reversed !

    Reversed は List 型を返すので、
    List の foldLeft が使われる
たのしい高階関数 λ  



Agenda
                 高階関数ってなに?


                     高階関数を学ぶメリット


                 リストを扱う高階関数


               まとめ
たのしい高階関数 λ  




  ・高階関数は関数を引数に渡せるので、処理の再利用が
   行いやすい(型推論やラムダ式などの言語支援が重要)

  ・パターンを覚えると、他の関数型言語でも応用が利く

  ・リスト処理の高階関数のように、便利で強力な関数が
   最初から用意されている
ご清聴ありがとう
ございました!!

More Related Content

What's hot

ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門
Eita Sugimoto
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
 
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Scott Wlaschin
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
 
Parser combinatorってなんなのさ
Parser combinatorってなんなのさParser combinatorってなんなのさ
Parser combinatorってなんなのさ
cct-inc
 
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
t-sin
 
よくわかるCoqプログラミング
よくわかるCoqプログラミングよくわかるCoqプログラミング
よくわかるCoqプログラミング
Real_analysis
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
Haruka Oikawa
 
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
mametter
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
Freer Monads, More Extensible Effects
Freer Monads, More Extensible EffectsFreer Monads, More Extensible Effects
Freer Monads, More Extensible Effects
Hiromi Ishii
 
「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界maruyama097
 
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
t-sin
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
 
圏とHaskellの型
圏とHaskellの型圏とHaskellの型
圏とHaskellの型
KinebuchiTomo
 
katagaitai CTF勉強会 #3 crypto
katagaitai CTF勉強会 #3 cryptokatagaitai CTF勉強会 #3 crypto
katagaitai CTF勉強会 #3 crypto
trmr
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
 
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
Hiro H.
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
 

What's hot (20)

ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
Parser combinatorってなんなのさ
Parser combinatorってなんなのさParser combinatorってなんなのさ
Parser combinatorってなんなのさ
 
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
 
よくわかるCoqプログラミング
よくわかるCoqプログラミングよくわかるCoqプログラミング
よくわかるCoqプログラミング
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
 
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
Freer Monads, More Extensible Effects
Freer Monads, More Extensible EffectsFreer Monads, More Extensible Effects
Freer Monads, More Extensible Effects
 
「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界
 
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
圏とHaskellの型
圏とHaskellの型圏とHaskellの型
圏とHaskellの型
 
katagaitai CTF勉強会 #3 crypto
katagaitai CTF勉強会 #3 cryptokatagaitai CTF勉強会 #3 crypto
katagaitai CTF勉強会 #3 crypto
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 

Similar to たのしい高階関数

Applicative functor
Applicative functorApplicative functor
Applicative functor
Yuichi Adachi
 
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへNaoki Kitora
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
Naoki Aoyama
 
関数型プログラミング in javascript
関数型プログラミング in javascript関数型プログラミング in javascript
関数型プログラミング in javascript
Ryuma Tsukano
 
プログラミング言語Scala
プログラミング言語Scalaプログラミング言語Scala
プログラミング言語Scala
TanUkkii
 
200319 eash python_shareslide_functions
200319 eash python_shareslide_functions200319 eash python_shareslide_functions
200319 eash python_shareslide_functions
Hiroki Katayama
 
F#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングF#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングsatoshimurakumo
 
微分可能問題
微分可能問題微分可能問題
微分可能問題
政孝 鍋島
 
微分可能問題
微分可能問題微分可能問題
微分可能問題
nabeshimamasataka
 
Functional Way
Functional WayFunctional Way
Functional Way
Kent Ohashi
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
Daisuke Igarashi
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
 
Haskell勉強会 in ie
Haskell勉強会 in ieHaskell勉強会 in ie
Haskell勉強会 in ie
maeken2010
 
TypeScript & 関数型講座 第3回 関数型入門
TypeScript & 関数型講座 第3回 関数型入門TypeScript & 関数型講座 第3回 関数型入門
TypeScript & 関数型講座 第3回 関数型入門
gypsygypsy
 
Chapter 6: Computing on the language (R Language Definition)
Chapter 6: Computing on the language (R Language Definition)Chapter 6: Computing on the language (R Language Definition)
Chapter 6: Computing on the language (R Language Definition)
Nagi Teramo
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
 
Functional Programming in Swift
Functional Programming in SwiftFunctional Programming in Swift
Functional Programming in SwiftKaz Yoshikawa
 
Clean
Clean Clean
Clean
osamu kimura
 
Clean
Clean Clean
Clean
osamu kimura
 

Similar to たのしい高階関数 (20)

Haskell超入門 Part.1
Haskell超入門 Part.1Haskell超入門 Part.1
Haskell超入門 Part.1
 
Applicative functor
Applicative functorApplicative functor
Applicative functor
 
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
 
関数型プログラミング in javascript
関数型プログラミング in javascript関数型プログラミング in javascript
関数型プログラミング in javascript
 
プログラミング言語Scala
プログラミング言語Scalaプログラミング言語Scala
プログラミング言語Scala
 
200319 eash python_shareslide_functions
200319 eash python_shareslide_functions200319 eash python_shareslide_functions
200319 eash python_shareslide_functions
 
F#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングF#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミング
 
微分可能問題
微分可能問題微分可能問題
微分可能問題
 
微分可能問題
微分可能問題微分可能問題
微分可能問題
 
Functional Way
Functional WayFunctional Way
Functional Way
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
 
Haskell勉強会 in ie
Haskell勉強会 in ieHaskell勉強会 in ie
Haskell勉強会 in ie
 
TypeScript & 関数型講座 第3回 関数型入門
TypeScript & 関数型講座 第3回 関数型入門TypeScript & 関数型講座 第3回 関数型入門
TypeScript & 関数型講座 第3回 関数型入門
 
Chapter 6: Computing on the language (R Language Definition)
Chapter 6: Computing on the language (R Language Definition)Chapter 6: Computing on the language (R Language Definition)
Chapter 6: Computing on the language (R Language Definition)
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
Functional Programming in Swift
Functional Programming in SwiftFunctional Programming in Swift
Functional Programming in Swift
 
Clean
Clean Clean
Clean
 
Clean
Clean Clean
Clean
 

More from Shinichi Kozake

SIerアーキテクト視点でみたKotlinの紹介
SIerアーキテクト視点でみたKotlinの紹介SIerアーキテクト視点でみたKotlinの紹介
SIerアーキテクト視点でみたKotlinの紹介
Shinichi Kozake
 
あなたとAndroid!?今すぐダウンロード
あなたとAndroid!?今すぐダウンロードあなたとAndroid!?今すぐダウンロード
あなたとAndroid!?今すぐダウンロード
Shinichi Kozake
 
Kotlinで関数拡張しちゃうぞ![修正版]
Kotlinで関数拡張しちゃうぞ![修正版]Kotlinで関数拡張しちゃうぞ![修正版]
Kotlinで関数拡張しちゃうぞ![修正版]
Shinichi Kozake
 
とある現場のシステムアーキテクチャ
とある現場のシステムアーキテクチャとある現場のシステムアーキテクチャ
とある現場のシステムアーキテクチャ
Shinichi Kozake
 
関ジャバの間においでよ!
関ジャバの間においでよ!関ジャバの間においでよ!
関ジャバの間においでよ!
Shinichi Kozake
 
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情についてあなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
Shinichi Kozake
 
Web API Design for JAX-RS
Web API Design for JAX-RSWeb API Design for JAX-RS
Web API Design for JAX-RS
Shinichi Kozake
 
ゆるふわアーキを支える技術
ゆるふわアーキを支える技術ゆるふわアーキを支える技術
ゆるふわアーキを支える技術
Shinichi Kozake
 
Nullなのはいけないと思います!
Nullなのはいけないと思います!Nullなのはいけないと思います!
Nullなのはいけないと思います!
Shinichi Kozake
 
生きろ!チーム開発! 300人月の仲間はみな死んだ
生きろ!チーム開発! 300人月の仲間はみな死んだ生きろ!チーム開発! 300人月の仲間はみな死んだ
生きろ!チーム開発! 300人月の仲間はみな死んだ
Shinichi Kozake
 
システムアーキテクト~My batis編~
システムアーキテクト~My batis編~システムアーキテクト~My batis編~
システムアーキテクト~My batis編~
Shinichi Kozake
 
Play!30分クッキング
Play!30分クッキングPlay!30分クッキング
Play!30分クッキング
Shinichi Kozake
 
システムアーキテクト
システムアーキテクトシステムアーキテクト
システムアーキテクト
Shinichi Kozake
 
Xtend30分クッキング やきに駆動
Xtend30分クッキング   やきに駆動Xtend30分クッキング   やきに駆動
Xtend30分クッキング やきに駆動
Shinichi Kozake
 
Xtend30分クッキング
Xtend30分クッキングXtend30分クッキング
Xtend30分クッキング
Shinichi Kozake
 
鹿駆動
鹿駆動鹿駆動
鹿駆動
Shinichi Kozake
 
MyBatisで流れるようなメソッドチェーン
MyBatisで流れるようなメソッドチェーンMyBatisで流れるようなメソッドチェーン
MyBatisで流れるようなメソッドチェーンShinichi Kozake
 
play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西
Shinichi Kozake
 

More from Shinichi Kozake (19)

SIerアーキテクト視点でみたKotlinの紹介
SIerアーキテクト視点でみたKotlinの紹介SIerアーキテクト視点でみたKotlinの紹介
SIerアーキテクト視点でみたKotlinの紹介
 
あなたとAndroid!?今すぐダウンロード
あなたとAndroid!?今すぐダウンロードあなたとAndroid!?今すぐダウンロード
あなたとAndroid!?今すぐダウンロード
 
Kotlinで関数拡張しちゃうぞ![修正版]
Kotlinで関数拡張しちゃうぞ![修正版]Kotlinで関数拡張しちゃうぞ![修正版]
Kotlinで関数拡張しちゃうぞ![修正版]
 
とある現場のシステムアーキテクチャ
とある現場のシステムアーキテクチャとある現場のシステムアーキテクチャ
とある現場のシステムアーキテクチャ
 
関ジャバの間においでよ!
関ジャバの間においでよ!関ジャバの間においでよ!
関ジャバの間においでよ!
 
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情についてあなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
 
Web API Design for JAX-RS
Web API Design for JAX-RSWeb API Design for JAX-RS
Web API Design for JAX-RS
 
ゆるふわアーキを支える技術
ゆるふわアーキを支える技術ゆるふわアーキを支える技術
ゆるふわアーキを支える技術
 
Nullなのはいけないと思います!
Nullなのはいけないと思います!Nullなのはいけないと思います!
Nullなのはいけないと思います!
 
生きろ!チーム開発! 300人月の仲間はみな死んだ
生きろ!チーム開発! 300人月の仲間はみな死んだ生きろ!チーム開発! 300人月の仲間はみな死んだ
生きろ!チーム開発! 300人月の仲間はみな死んだ
 
システムアーキテクト~My batis編~
システムアーキテクト~My batis編~システムアーキテクト~My batis編~
システムアーキテクト~My batis編~
 
Play!30分クッキング
Play!30分クッキングPlay!30分クッキング
Play!30分クッキング
 
システムアーキテクト
システムアーキテクトシステムアーキテクト
システムアーキテクト
 
Xtend30分クッキング やきに駆動
Xtend30分クッキング   やきに駆動Xtend30分クッキング   やきに駆動
Xtend30分クッキング やきに駆動
 
Xtend30分クッキング
Xtend30分クッキングXtend30分クッキング
Xtend30分クッキング
 
鹿駆動
鹿駆動鹿駆動
鹿駆動
 
MyBatisで流れるようなメソッドチェーン
MyBatisで流れるようなメソッドチェーンMyBatisで流れるようなメソッドチェーン
MyBatisで流れるようなメソッドチェーン
 
About Jobs
About JobsAbout Jobs
About Jobs
 
play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西
 

Recently uploaded

ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
sugiuralab
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
Yuki Miyazaki
 

Recently uploaded (9)

ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
 

たのしい高階関数