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
生成AIの不確実性と向き合うためのオブジェクト指向設計
tkikuchi1002
2
680
これまでのキャリアとこれからMLエンジニアとしてどう動くか
masatakashiwagi
0
550
Autopsy of a Cascading Outage from a MySQL Crashing Bug
jfg956
0
200
サービス成長と共に肥大化するモノレポ、長くなるCI時間 / As services grow, monorepos get bigger and CI time gets longer
kohbis
5
2.1k
私のRSpecの書き方 / How I write RSpec
tmtms
4
840
実務への応用例から考える 変更に強いオブジェクト指向設計 / 20240324-ooc2024
bengo4com
7
5.5k
KubeCon EU 2024 : Knative Maintainers Session
salaboy
0
380
Oracle Database で機械学習を始めよう! Oracle Machine Learning
oracle4engineer
PRO
1
140
エバンジェリスト活動を7年やってきて見えてきた、コミュニティとエバンジェリストの関係
soracom
PRO
1
200
OpenTelemetry実践 はじめの一歩
taxin
0
320
複数の LLM モデルを扱う上で直面した辛みまとめ
kazuyaseki
1
250
SREsのためのSRE定着ガイド
netmarkjp
10
1.6k
Featured
See All Featured
It's Worth the Effort
3n
180
27k
Docker and Python
trallard
33
2.6k
The Illustrated Children's Guide to Kubernetes
chrisshort
28
46k
The MySQL Ecosystem @ GitHub 2015
samlambert
242
12k
Rails Girls Zürich Keynote
gr2m
91
13k
Making the Leap to Tech Lead
cromwellryan
123
8.4k
Designing with Data
zakiwarfel
94
4.8k
Code Review Best Practice
trishagee
54
15k
Build your cross-platform service in a week with App Engine
jlugia
223
17k
Designing Experiences People Love
moore
135
23k
Six Lessons from altMBA
skipperchong
19
2.9k
How to Ace a Technical Interview
jacobian
272
22k
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