SlideShare a Scribd company logo
1 of 37
Download to read offline
ポロリもあるよ!
記号だらけの	

無名関数
Shinya Hayakawa	

TSURUMAU
Shibuya.pm #17	

2015/06/02
ドキッ!
自己紹介
昔は Perl を使ってました
CPAN Authorではない
「lambda 完全解説」
http://cpplover.blogspot.jp/2009/11/lambda.html
「lambdaを定義しよう」
int main()	
{	
[](){} ;	
}
「lambdaを呼び出そう」
int main()	
{	
[](){}() ;	
}
「lambdaの文法解説」
int main()	
{	
[] // [ lambda-capture ]	
() // ( parameter-declaration-clause )	
{} // compound-statement	
() // Function call expression	
;	
}
Perlでもやりたく
なりますよね?
準備
括弧のみで可能な記述
syntax OKな項を探す
黒魔術には頼らない
括弧のみ
[]	
()	
{}
3 通り
括弧のみ
[]	
()	
{}
syntax OK
syntax OK
syntax OK
3 通り
括弧のペア
[][]	
[]()	
[]{}	
()[]	
()()	
(){}	
{}[]	
{}()	
{}{}
3 x 3 = 9 通り
括弧のペア
[][]	
[]()	
[]{}	
()[]	
()()	
(){}	
{}[]	
{}()	
{}{}
3 x 3 = 9 通り
syntax
error
syntax
error
syntax
error
syntax
error
syntax
error
syntax
error
syntax
error
syntax
error
syntax
error
注目
()[]
list slice
|'(' expr ')' '[' expr ‘]’	
…	
|'(' ')' '[' expr ‘]’	
!
- perly.y
修正後
()[()]
修正後
()[()]
syntax OK
我々は ()[()]を
手に入れました
ところで
scalar or list?
()[…]
ココ
scalar or list?
(LIST)[LIST]
プログラミングPerl第3版 p.87
問題1.1☆
print(	
("foo")[()]	
);
問題1.1☆
print(	
("foo")[()]	
);
→ ""
問題1.2☆☆
print scalar(	
("foo")[()]	
);
問題1.2☆☆
print scalar(	
("foo")[()]	
);
→ foo
解説
リストをリストコンテキスト以外で評価した時
のアレ。
カンマ演算子でスタックに積まれた値の最後
以外が捨てられる。


$x = ("a","b","c"); # $x="c"	
$x = ("a")[2,1,0]; # $x="a"
()は数値で…?
0+();	
	 " 0	
int(());	
	 " 0
解説
最後の値である()が数値で0と評価
され、リストの0番目の要素となる


$x = ("foo")[()];	
" $x = "foo"
応用
$x = ("foo")[()];	
$x = ("foo")[((()))];	
$x = ("foo")[(),(),()];
問題2.1☆☆☆
print(	
(sub{"foo"})[()]->()	
);
問題2.1☆☆☆
print(	
(sub{"foo"})[()]->()	
);
→ foo
問題2.2☆☆☆☆☆☆
print(	
(sub{"foo"})[()]->(1)	
);
問題2.2☆☆☆☆☆☆
print(	
(sub{"foo"})[()]->(1)	
);
→ Can't use an undefined value as a
subroutine reference
解説
print(	
(sub{"foo"})[()]->(1)	
);
スタックに積まれた関数呼び出し
の引数が、pp_lsliceに食われ
てしまっている
ここで
残念なお知らせ
無名関数について
CODEを生成するにはsub
キーワード必須
プロトタイプで&を使う…
括弧だけで関数の定義、
呼び出しはできない
まとめ
()[()] 記法
空リストの可能性
やっぱりPerl楽しいです!

More Related Content

What's hot

yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話bleis tift
 
templateとautoの型推論
templateとautoの型推論templateとautoの型推論
templateとautoの型推論MITSUNARI Shigeo
 
Brief introduction of Boost.ICL
Brief introduction of Boost.ICLBrief introduction of Boost.ICL
Brief introduction of Boost.ICLyak1ex
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座bleis tift
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由kikairoya
 
Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Keisuke Fukuda
 
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみたクソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみたMitsuru Kariya
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3Kenta Hattori
 
定理証明言語によるハードウェア検証
定理証明言語によるハードウェア検証定理証明言語によるハードウェア検証
定理証明言語によるハードウェア検証Shunji Nishimura
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJavableis tift
 
Scala 初心者が Hom 函手を Scala で考えてみた
Scala 初心者が Hom 函手を Scala で考えてみたScala 初心者が Hom 函手を Scala で考えてみた
Scala 初心者が Hom 函手を Scala で考えてみたKazuyuki TAKASE
 
言語処理系入門€2
言語処理系入門€2言語処理系入門€2
言語処理系入門€2Kenta Hattori
 
言語処理系入門1
言語処理系入門1言語処理系入門1
言語処理系入門1Kenta Hattori
 
現実(えくせる)と戦う話
現実(えくせる)と戦う話現実(えくせる)と戦う話
現実(えくせる)と戦う話bleis tift
 

What's hot (20)

yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 
templateとautoの型推論
templateとautoの型推論templateとautoの型推論
templateとautoの型推論
 
Brief introduction of Boost.ICL
Brief introduction of Boost.ICLBrief introduction of Boost.ICL
Brief introduction of Boost.ICL
 
C++14言語編
C++14言語編C++14言語編
C++14言語編
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12
 
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみたクソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3
 
定理証明言語によるハードウェア検証
定理証明言語によるハードウェア検証定理証明言語によるハードウェア検証
定理証明言語によるハードウェア検証
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJava
 
Emcjp item33,34
Emcjp item33,34Emcjp item33,34
Emcjp item33,34
 
Scala 初心者が Hom 函手を Scala で考えてみた
Scala 初心者が Hom 函手を Scala で考えてみたScala 初心者が Hom 函手を Scala で考えてみた
Scala 初心者が Hom 函手を Scala で考えてみた
 
言語処理系入門€2
言語処理系入門€2言語処理系入門€2
言語処理系入門€2
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
言語処理系入門1
言語処理系入門1言語処理系入門1
言語処理系入門1
 
C++ tips4 cv修飾編
C++ tips4 cv修飾編C++ tips4 cv修飾編
C++ tips4 cv修飾編
 
現実(えくせる)と戦う話
現実(えくせる)と戦う話現実(えくせる)と戦う話
現実(えくせる)と戦う話
 

Viewers also liked

NZKR Family Tree Paert 2
NZKR Family Tree Paert 2NZKR Family Tree Paert 2
NZKR Family Tree Paert 2manalino
 
Branding powepoint
Branding powepointBranding powepoint
Branding powepointDaniel Gold
 
презентация гуревич и.к.
презентация гуревич и.к.презентация гуревич и.к.
презентация гуревич и.к.Anton Surov
 
Stl bus journal 05 03 13 - river city empire
Stl bus journal   05 03 13 - river city empireStl bus journal   05 03 13 - river city empire
Stl bus journal 05 03 13 - river city empireMajor Brands
 
выступление по компетенциям
выступление по компетенциямвыступление по компетенциям
выступление по компетенциямDemanessa
 
Μονή Οσίου Λουκά
Μονή Οσίου ΛουκάΜονή Οσίου Λουκά
Μονή Οσίου Λουκάparaskevit
 
Rio+20 module, part 1 11.30.11 don
Rio+20 module, part 1 11.30.11 donRio+20 module, part 1 11.30.11 don
Rio+20 module, part 1 11.30.11 donANPED1
 
Workshop key note article
Workshop key note articleWorkshop key note article
Workshop key note articleNazmul Karim
 
MOETS Club Class Events
MOETS Club Class EventsMOETS Club Class Events
MOETS Club Class EventsRahil Bindra
 
Contemporary
ContemporaryContemporary
Contemporarysinaloa1
 
выступл.на конференции
выступл.на конференциивыступл.на конференции
выступл.на конференцииDemanessa
 
Contemporary
ContemporaryContemporary
Contemporarysinaloa1
 
سيكولوجيه الابتكار
سيكولوجيه الابتكارسيكولوجيه الابتكار
سيكولوجيه الابتكارM_taqniyat
 

Viewers also liked (20)

Class projects
Class projectsClass projects
Class projects
 
NZKR Family Tree Paert 2
NZKR Family Tree Paert 2NZKR Family Tree Paert 2
NZKR Family Tree Paert 2
 
Branding powepoint
Branding powepointBranding powepoint
Branding powepoint
 
презентация гуревич и.к.
презентация гуревич и.к.презентация гуревич и.к.
презентация гуревич и.к.
 
Stl bus journal 05 03 13 - river city empire
Stl bus journal   05 03 13 - river city empireStl bus journal   05 03 13 - river city empire
Stl bus journal 05 03 13 - river city empire
 
выступление по компетенциям
выступление по компетенциямвыступление по компетенциям
выступление по компетенциям
 
Gertrude stein's world
Gertrude stein's worldGertrude stein's world
Gertrude stein's world
 
Who are
 Who are Who are
Who are
 
Μονή Οσίου Λουκά
Μονή Οσίου ΛουκάΜονή Οσίου Λουκά
Μονή Οσίου Λουκά
 
Lenovo hall
Lenovo hallLenovo hall
Lenovo hall
 
Rio+20 module, part 1 11.30.11 don
Rio+20 module, part 1 11.30.11 donRio+20 module, part 1 11.30.11 don
Rio+20 module, part 1 11.30.11 don
 
Workshop key note article
Workshop key note articleWorkshop key note article
Workshop key note article
 
Prezentacja1
Prezentacja1Prezentacja1
Prezentacja1
 
MOETS Club Class Events
MOETS Club Class EventsMOETS Club Class Events
MOETS Club Class Events
 
Contemporary
ContemporaryContemporary
Contemporary
 
выступл.на конференции
выступл.на конференциивыступл.на конференции
выступл.на конференции
 
Zita 111216
Zita 111216Zita 111216
Zita 111216
 
Contemporary
ContemporaryContemporary
Contemporary
 
سيكولوجيه الابتكار
سيكولوجيه الابتكارسيكولوجيه الابتكار
سيكولوجيه الابتكار
 
Carbon tax. impacts on businesses and individuals
Carbon tax. impacts on businesses and individualsCarbon tax. impacts on businesses and individuals
Carbon tax. impacts on businesses and individuals
 

More from Shinya Hayakawa

近現代史勉強会 #1
近現代史勉強会 #1近現代史勉強会 #1
近現代史勉強会 #1Shinya Hayakawa
 
Oculus Game Jam in Japan #3
Oculus Game Jam in Japan #3Oculus Game Jam in Japan #3
Oculus Game Jam in Japan #3Shinya Hayakawa
 
casualにRubyをパースしてみたい
casualにRubyをパースしてみたいcasualにRubyをパースしてみたい
casualにRubyをパースしてみたいShinya Hayakawa
 
第1回 プログラマのための計算機科学
第1回 プログラマのための計算機科学第1回 プログラマのための計算機科学
第1回 プログラマのための計算機科学Shinya Hayakawa
 
プログラマのための計算機科学はじめました
プログラマのための計算機科学はじめましたプログラマのための計算機科学はじめました
プログラマのための計算機科学はじめましたShinya Hayakawa
 
思いやりプログラミング 2013
思いやりプログラミング 2013思いやりプログラミング 2013
思いやりプログラミング 2013Shinya Hayakawa
 
イラストでGit! agatsuma.survive#03
イラストでGit! agatsuma.survive#03イラストでGit! agatsuma.survive#03
イラストでGit! agatsuma.survive#03Shinya Hayakawa
 
guRuby Community Appeal in RubyKaigi 2013 (safe ver.)
guRuby Community Appeal in RubyKaigi 2013 (safe ver.)guRuby Community Appeal in RubyKaigi 2013 (safe ver.)
guRuby Community Appeal in RubyKaigi 2013 (safe ver.)Shinya Hayakawa
 
魔法少女のまど★ワーカ(手書きver)
魔法少女のまど★ワーカ(手書きver)魔法少女のまど★ワーカ(手書きver)
魔法少女のまど★ワーカ(手書きver)Shinya Hayakawa
 

More from Shinya Hayakawa (10)

近現代史勉強会 #1
近現代史勉強会 #1近現代史勉強会 #1
近現代史勉強会 #1
 
Oculus Game Jam in Japan #3
Oculus Game Jam in Japan #3Oculus Game Jam in Japan #3
Oculus Game Jam in Japan #3
 
casualにRubyをパースしてみたい
casualにRubyをパースしてみたいcasualにRubyをパースしてみたい
casualにRubyをパースしてみたい
 
第1回 プログラマのための計算機科学
第1回 プログラマのための計算機科学第1回 プログラマのための計算機科学
第1回 プログラマのための計算機科学
 
プログラマのための計算機科学はじめました
プログラマのための計算機科学はじめましたプログラマのための計算機科学はじめました
プログラマのための計算機科学はじめました
 
思いやりプログラミング 2013
思いやりプログラミング 2013思いやりプログラミング 2013
思いやりプログラミング 2013
 
イラストでGit! agatsuma.survive#03
イラストでGit! agatsuma.survive#03イラストでGit! agatsuma.survive#03
イラストでGit! agatsuma.survive#03
 
guRuby Community Appeal in RubyKaigi 2013 (safe ver.)
guRuby Community Appeal in RubyKaigi 2013 (safe ver.)guRuby Community Appeal in RubyKaigi 2013 (safe ver.)
guRuby Community Appeal in RubyKaigi 2013 (safe ver.)
 
魔法少女のまど★ワーカ(手書きver)
魔法少女のまど★ワーカ(手書きver)魔法少女のまど★ワーカ(手書きver)
魔法少女のまど★ワーカ(手書きver)
 
Vi Boot Camp #1
Vi Boot Camp #1Vi Boot Camp #1
Vi Boot Camp #1
 

Recently uploaded

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Recently uploaded (8)

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

ドキッ!記号だらけの無名関数