Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
curry.php
Search
Kazunori Otani
March 29, 2014
Technology
0
600
curry.php
A functional programming using php.
Kazunori Otani
March 29, 2014
Tweet
Share
More Decks by Kazunori Otani
See All by Kazunori Otani
SLI, SLOとカオスエンジニアリング、そしてオブザーバビリティ SRE Lounge #12
katzchang
4
2.2k
オビザーバビリティ成熟モデル
katzchang
1
3.6k
広告配信におけるパフォーマンス対策、やるかやらないか
katzchang
2
6.9k
高スループット・低レイテンシーなWEBサービスにおけるパフォーマンス対策の現実
katzchang
4
1.1k
モニタリングだいじというはなし
katzchang
1
170
プロビジョニングツールはMakeで決まりだろ
katzchang
12
9.3k
頑張らないScala
katzchang
2
2.7k
Immutable Infrastructure #1
katzchang
1
5k
zgok-sunrise
katzchang
1
280
Other Decks in Technology
See All in Technology
スケジュール指定のFargate Spotと友達になれた話
news_it_enj
0
240
How to Build a Strong Engineering Culture
alperhankendi
0
120
App Runnerでパラメーターストアの値を使ってみた
miura55
0
230
Server-Side Kotlin + Spring Boot + Exposedでやったこと
ikefukurou777
0
110
マルチテナントの実現におけるDB設計とRLS / Utilizing RSL in multi-tenancy
soudai
20
5k
本気でプロダクトに向き合うCTOになるために必要な事 (技育祭2024春)
mosa_siru
33
12k
OpenStack再入門「アーキテクチャ編」
kajinamit
0
250
The Disturbing Truth: Why Do Most Software Projects Suck?
lemiorhan
0
110
二刀流でWinActorを活用してみた話
tamai_63
0
120
出張! #DevelopersIO IT技術ブログの中の人が語る勉強会 「【速報】AWSの生成AIサービスであるAmazon Bedrock がリリースされたので朝イチで触ってみた」について語る
oshanqq
0
290
AIエージェントが変えるソフトウェアのパラダイム
masahiro_nishimi
0
200
小さく始めるAnsible
stopendy
0
210
Featured
See All Featured
Designing for Performance
lara
601
67k
Infographics Made Easy
chrislema
237
17k
Code Review Best Practice
trishagee
54
15k
Facilitating Awesome Meetings
lara
39
5.5k
Documentation Writing (for coders)
carmenintech
59
3.7k
How STYLIGHT went responsive
nonsquared
92
4.7k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
18
1.7k
Rails Girls Zürich Keynote
gr2m
91
13k
Web development in the modern age
philhawksworth
201
10k
How to train your dragon (web standard)
notwaldorf
71
5k
Fashionably flexible responsive web design (full day workshop)
malarkey
397
65k
The Brand Is Dead. Long Live the Brand.
mthomps
48
20k
Transcript
DVSSZQIQ LZPO@LBP@XFEEJOH !LBU[DIBOH
21)1͖Ͱ͔͢ʁ
!LBU[DIBOH
21)1͖Ͱ͔͢ʁ
ʊਓਓਓਓਓਓਓਓਓਓਓਓਓʊ ʼɹಥવ4USJOH͕*OUʹมΘΔɹʻ ʉ:?:?:?:?:?:?:?:?:?:ʉ
ʮྫ͑ɺ1)1Λආ͚Δʯ
IUUQKBXJLJQFEJBPSHXJLJ&&"&"&"#3BTNVT@-FSEPSG@DSPQQFEKQH
1)1JTBCPVUBTFYDJUJOHBTZPVSUPPUICSVTI :PVVTFJUFWFSZEBZ JUEPFTUIFKPC JUJTBTJNQMFUPPM TPXIBU IUUQFOXJLJRVPUFPSHXJLJ3BTNVT@-FSEPSG
「PHPは、歯ブラシみたいなものですね。 毎日使うものですけど、だから何でしょう?」 IUUQBOPOEIBUFMBCPKQ
None
+BWBͱൺֱ
ແ໊͕ؔ͋Δ ˞+BWBҎલͱͷൺֱ
<?PHP $f = function($a, $b) { return $a + $b;
}; echo $f(2,3); // => 5
<?PHP $f = (function($a, $b) { return $a * $b;
})(2,3); // FAIL!!!
<?PHP $fib = function($x) { return $x < 2 ?
$x : $fib($x-1) + $fib($x-2); })); echo $fib(6); // FAIL!!
ΧϦʔԽ
IUUQTHJTUHJUIVCDPNLBU[DIBOH ˞༵ۚޕޙͰ͢
<?PHP $f = F::curry( function($_) { return $_[0] + $_[1];
}); echo $f->_(2)->_(3)->_();
IUUQTHJTUHJUIVCDPNBKJZPTIJWH CBECEF ˞༵ۚޕޙͰ͢
<?PHP $c = curry( function($a, $b){ return $a + $b;
}); echo $c->_(2)->_(3);
<?PHP function YComb($f) { $yc = curry( function($y, $x) use
($f) { return $f($y($y), $x); }); return $yc($yc); }
<?PHP echo (YComb(curry( function($f, $x){ return $x < 2 ?
$x : $f($x-1) + $f($x-2); })))->_(6);
ʮ͜Εɺࣃϒϥγͱ͍ͯ͠ʹͳΔϨϕϧʯ
-PWFZPVS1)1
None