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
NDS_36_RubyCurry
Search
kasacchiful
March 15, 2014
Programming
0
1.4k
NDS_36_RubyCurry
NDS#36 の言語セッションでしゃべった内容です。
kasacchiful
March 15, 2014
Tweet
Share
More Decks by kasacchiful
See All by kasacchiful
ワイがおすすめする新潟の食 / 20250912jasst-niigata-lt
kasacchiful
0
14
WorkersでDiscord botを試してみた / 20250822workers-tech-talk-niigata
kasacchiful
1
38
地域コミュニティへの「感謝」と「恩返し」 / 20250726jawsug-tochigi
kasacchiful
0
160
Amazon Q Developer for CLI を使って PHP Conference 新潟 2025 参加者向けにグルメサイトを構築した話 / 20250620niigata-5min-tech
kasacchiful
1
95
ワイがおすすめする新潟の食 / 20250530phpconf-niigata-eve
kasacchiful
0
400
生成AIでメタデータを生成してみた / 20250525generate-metadata-using-generative-ai
kasacchiful
0
81
Strands Agents SDK で AIエージェント作成 を試してみた / 20250525strands-agents
kasacchiful
0
300
いろんな世界を見てみよう / 20250508ninno_tech_fest
kasacchiful
0
43
Amazon Q Developer for CLIのある生活 / 20250427ai_craft_hacks_niigata1
kasacchiful
1
100
Other Decks in Programming
See All in Programming
print("Hello, World")
eddie
2
530
Processing Gem ベースの、2D レトロゲームエンジンの開発
tokujiros
2
130
ProxyによるWindow間RPC機構の構築
syumai
3
1.2k
Deep Dive into Kotlin Flow
jmatsu
1
360
@Environment(\.keyPath)那么好我不允许你们不知道! / atEnvironment keyPath is so good and you should know it!
lovee
0
120
Putting The Genie in the Bottle - A Crash Course on running LLMs on Android
iurysza
0
140
Testing Trophyは叫ばない
toms74209200
0
890
デザイナーが Androidエンジニアに 挑戦してみた
874wokiite
0
540
個人軟體時代
ethanhuang13
0
330
複雑なドメインに挑む.pdf
yukisakai1225
5
1.2k
プロパティベーステストによるUIテスト: LLMによるプロパティ定義生成でエッジケースを捉える
tetta_pdnt
0
3.3k
プロポーザル駆動学習 / Proposal-Driven Learning
mackey0225
2
1.3k
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
Making Projects Easy
brettharned
117
6.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
For a Future-Friendly Web
brad_frost
180
9.9k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.9k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Balancing Empowerment & Direction
lara
3
620
How to Think Like a Performance Engineer
csswizardry
26
1.9k
The Language of Interfaces
destraynor
161
25k
Faster Mobile Websites
deanohume
309
31k
Transcript
RubyͷCurryΛ গ͠৯ͯΈͨ ּݪɹʢ@kasacchifulʣ
ࣗݾհ • ּݪɹʢ@kasacchifulʣ • ৽ׁࢢࡏॅ • SIerۈʢΠϯϑϥඋ͕ଟΊʣ • Ruby͕͓ؾʹೖΓ •
VB.NET, Javascript, SQL, PHP, PowerShell
એ
JaSST’14 Niigata • ࣌ɿ20144݄11ʢۚʣ10:00 ʙ 16:50 • ձɿगϝοηɹதձٞࣨ302B • جௐߨԋɿদඌ୩
ప ࢯʮςετͷલʹνʔϜͷݱྗΛσόοά!!ɹɹ ʙݱྗΛܭଌ͠ɼ߹ཧతͳຏ͖ํΛֶͿʙʯ • ϫʔΫγϣοϓɿ૿ా ྱࢠ ࢯʮݱྗͱνʔϜϏϧσΟϯάɹɹɹɹ ʙνʔϜΛ࡞ͬͯɼຏ͍͍ͯͨ͘Ίʹʙʯ • ਃࠐకɿ20144݄4ʢۚʣ • Webɿhttp://jasst.jp/symposium/jasst14niigata.html
Ruby • 19932݄24ੜ·Εɺ1995ެ։ • ΦϒδΣΫτࢦʢ͕ͯ͢ΦϒδΣΫτʣ • ڧ͍ಈతܕ͚ • ެࣜϖʔδɿhttps://www.ruby-lang.org/ja/
Ruby ͷ Curry ͬͯԿʁ
Ruby ͷ Curry hoge = -> (x,y,z) { x +
y * z } ## hoge = lambda {|x,y,z| x + y * z} ͱಉ͡ curry_hoge = hoge.curry ! hoge.call(1,2,3) #=> 7 hoge[2,3,4] #=> 14 ! curry_hoge.call(1).call(2).call(3) #=> 7 curry_hoge[2][3][4] #=> 14
ͦͦ Curry ͬͯԿʁ
Curry ʮΧϦʔԽʯͷ͜ͱ ΧϦʔԽ (currying) ͱɺܭࢉػՊֶͷٕ๏ͷҰͭɻ ෳͷҾΛͱΔؔΛɺҾ͕ʮͱͷؔͷ࠷ॳͷ ҾʯͰΓ͕ʮͱͷؔͷΓͷҾΛऔΓ݁Ռ Λฦؔ͢ʯͰ͋ΔΑ͏ͳؔʹ͢Δ͜ͱɻ ʢग़యɿʮΧϦʔԽ -
Wikipediaʯʣ http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AA%E3%83%BC%E5%8C%96
Ruby ͷ Curry hoge = ->(x,y,z) { x + y
* z } curry_hoge = hoge.curry ## curry_hoge = ->(x) { ->(y) { ->(z) { x + y * z }}} ͱಉ͡ ! ɾProc#curry Ruby 1.9 ͔Β͑Δ
Curry ͓͍͍ͬͯ͠ͷʁ
͓͍͍͖ͨͩ͘͠·͠ΐ͏ ΧϦʔԽ͢Δ͜ͱͰɺطଘͷؔʹҾͷΛ෦ద༻͠ ͯɺผͷؔΛ࡞Δ͜ͱ͕ग़དྷ·͢ɻ ! طଘͷؔͷ࠶ར༻ɹɹɹɹɹʮDRYʯɹ ! ͏·͑͘ɺ͓͍͘͠ͳΓ·͢ɻ
Wikipedia ͷྫΛ Ruby Ͱ div = ->(x,y) { x /
y } ## currying cdiv = div.curry #=> ->(x) {->(y) { x/ y }} ## partial application inv = cdiv[1.0] #=> ->(y) { 1.0 / y } inv[3] #=> 0.3333333333333333 inv[10] #=> 0.1
ҙ ʮΧϦʔԽʯͱʮ෦ద༻ʯΛؒҧ͑ͳ͍Α͏ʹ ! ΧϦʔԽɿ->(x,y){x/y} Λ ->(x){->(y){x/y}} ʹม͢Δ͜ͱ ෦ద༻ɿҰ෦ͷҾʹΛద༻ͯ͠ɺผͷؔΛͭ͘Δ ͜ͱ
ଞݴޠͰͷ Curry • ୈҰڃؔΛѻ͑ΔݴޠͰ͋ΕɺΧϦʔԽΛ࣮ࢪ͢Δ ؔΛ࣮Մೳɻ • ྫɿLISP, Scheme, F#, Scala,
Erlang, Eiffel, Perl, Python, Rݴޠ, Sݴޠ, JavaScript • ϥΠϒϥϦͰɺΧϦʔԽؔΛ͑Δݴޠ͋Δ • Groovy ͷ curry ෦ద༻ͳͷͰҙ ग़యɿʮΧϦʔԽ - Wikipediaʯ http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AA%E3%83%BC%E5%8C%96
Curry ΛͬͯΈΔ
FizzBuzzͯ͠ΈΔ
·ͱΊ
͓͍͍͠CurryΛ࡞ͬͯ ͓͍͍͖ͨͩ͘͠·͠ΐ͏
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠