SlideShare a Scribd company logo
1 of 11
関数から関数を投げる

  @napthats
自己紹介
●   napthats (ザッツ)
●   napthats.com
●   言語:Perl, Scala, Java, Haskell, …
●   Perl暦:三年ぐらい
●   最近はScalaが多い
    –   Perlはちょっとしたテキスト変換とかに使う
●   お題は無理やり
高階関数
●   関数を受け取ったり返したりする関数
●   関数型言語によく出てくる
●   Perlだとmapとか
●   print(map {$_ + 2} (1, 2, 3))
    –   345
    –   mapは{$_ + 2}という関数を受け取る
高階関数
●   関数を投げ返す関数
●   sub f {
●       my $x = shift;
●       return sub {
●           my $y = shift;
●           return $x + $y;
●       }
●   }
高階関数
●   関数を投げ返す関数
●   sub f {
●       my $x = shift;
●       return sub {
●           my $y = shift;
●           return $x + $y;
●       }
●   }
高階関数
●   使い方
●   my fixed_f = f(3);
●   print fixed_f(4); #7
カリー化
●   多引数関数を高階関数に変換する
●   「xとyを受け取って結果を返す関数」を「xを
    受け取って『yを受け取って結果を返す関数』
    を返す関数」に
●   実はさっき出てきた
カリー化
●   sub f_curry {
●       my $x = shift;
●       return sub {
●           my $y = shift;
●           return $x + $y;
●       }
●   }
カリー化
●   普通に書くとこう
●   sub f {
●       my $x = shift;
●       my $y = shift;
●       return $x + $y;
●   }
カリー化
●   f(3, 4)
●   f_curry(3)->(4)

●   関数を受け取って自動でカリー化する関数も書
    けます
おわり

More Related Content

What's hot

Ruby 同好会宣言
Ruby 同好会宣言Ruby 同好会宣言
Ruby 同好会宣言Yuya Takeyama
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bashJun Nogata
 
Web技術勉強会 第25回
Web技術勉強会 第25回Web技術勉強会 第25回
Web技術勉強会 第25回龍一 田中
 
言語処理系入門4
言語処理系入門4言語処理系入門4
言語処理系入門4Kenta Hattori
 

What's hot (7)

Applicative functor
Applicative functorApplicative functor
Applicative functor
 
Ruby 同好会宣言
Ruby 同好会宣言Ruby 同好会宣言
Ruby 同好会宣言
 
勉強会課題①
勉強会課題①勉強会課題①
勉強会課題①
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
 
Web技術勉強会 第25回
Web技術勉強会 第25回Web技術勉強会 第25回
Web技術勉強会 第25回
 
言語処理系入門4
言語処理系入門4言語処理系入門4
言語処理系入門4
 
F#のすすめ
F#のすすめF#のすすめ
F#のすすめ
 

Viewers also liked (10)

RedIndustria - Robson Braga de Andrade
RedIndustria - Robson Braga de AndradeRedIndustria - Robson Braga de Andrade
RedIndustria - Robson Braga de Andrade
 
11budget
11budget11budget
11budget
 
INEC | Junho 2014 | Divulgação 27/06/2014
INEC | Junho 2014 | Divulgação 27/06/2014INEC | Junho 2014 | Divulgação 27/06/2014
INEC | Junho 2014 | Divulgação 27/06/2014
 
"Novidades Legislativas" 59 | 3 de setembro de 2013
 "Novidades Legislativas" 59 | 3 de setembro de 2013 "Novidades Legislativas" 59 | 3 de setembro de 2013
"Novidades Legislativas" 59 | 3 de setembro de 2013
 
Pays basque euskale herria
Pays basque euskale herriaPays basque euskale herria
Pays basque euskale herria
 
A Fotografia na hora certa
A Fotografia na hora certaA Fotografia na hora certa
A Fotografia na hora certa
 
Cómo hacer un blog (1)
Cómo hacer un blog (1)Cómo hacer un blog (1)
Cómo hacer un blog (1)
 
Novidades Legislativas Nº22 | 17/04/2013
Novidades Legislativas Nº22 | 17/04/2013Novidades Legislativas Nº22 | 17/04/2013
Novidades Legislativas Nº22 | 17/04/2013
 
Hp 48 guia rapida
Hp 48 guia rapidaHp 48 guia rapida
Hp 48 guia rapida
 
Indicadores Industriais | Julho/2011
Indicadores Industriais | Julho/2011Indicadores Industriais | Julho/2011
Indicadores Industriais | Julho/2011
 

Similar to Nambapm_napthats

"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6risou
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門kwatch
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数Shinichi Kozake
 

Similar to Nambapm_napthats (6)

"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6
 
Haskell超入門 Part.1
Haskell超入門 Part.1Haskell超入門 Part.1
Haskell超入門 Part.1
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
PHP7を魔改造した話
PHP7を魔改造した話PHP7を魔改造した話
PHP7を魔改造した話
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数
 

Nambapm_napthats

  • 2. 自己紹介 ● napthats (ザッツ) ● napthats.com ● 言語:Perl, Scala, Java, Haskell, … ● Perl暦:三年ぐらい ● 最近はScalaが多い – Perlはちょっとしたテキスト変換とかに使う ● お題は無理やり
  • 3. 高階関数 ● 関数を受け取ったり返したりする関数 ● 関数型言語によく出てくる ● Perlだとmapとか ● print(map {$_ + 2} (1, 2, 3)) – 345 – mapは{$_ + 2}という関数を受け取る
  • 4. 高階関数 ● 関数を投げ返す関数 ● sub f { ● my $x = shift; ● return sub { ● my $y = shift; ● return $x + $y; ● } ● }
  • 5. 高階関数 ● 関数を投げ返す関数 ● sub f { ● my $x = shift; ● return sub { ● my $y = shift; ● return $x + $y; ● } ● }
  • 6. 高階関数 ● 使い方 ● my fixed_f = f(3); ● print fixed_f(4); #7
  • 7. カリー化 ● 多引数関数を高階関数に変換する ● 「xとyを受け取って結果を返す関数」を「xを 受け取って『yを受け取って結果を返す関数』 を返す関数」に ● 実はさっき出てきた
  • 8. カリー化 ● sub f_curry { ● my $x = shift; ● return sub { ● my $y = shift; ● return $x + $y; ● } ● }
  • 9. カリー化 ● 普通に書くとこう ● sub f { ● my $x = shift; ● my $y = shift; ● return $x + $y; ● }
  • 10. カリー化 ● f(3, 4) ● f_curry(3)->(4) ● 関数を受け取って自動でカリー化する関数も書 けます