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を魔改造した話
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数
 

Recently uploaded

20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdfAyachika Kitazaki
 
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose EstimationToru Tamaki
 
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑Akihiro Kadohata
 
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)keikoitakurag
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptxssuserbefd24
 
Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )iwashiira2ctf
 
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521Satoshi Makita
 
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一瑛一 西口
 
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayersToru Tamaki
 
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計atsushi061452
 
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員Sadaomi Nishi
 

Recently uploaded (11)

20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
 
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
 
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )
 
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
 
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
 
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
 
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
 
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
 

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) ● 関数を受け取って自動でカリー化する関数も書 けます