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
関数型言語と私/function-and-me
Search
color_box
July 12, 2017
Technology
270
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
関数型言語と私/function-and-me
2017-07-12 の(car (cdr ファンクション倶楽部)) で使用したスライドです。
color_box
July 12, 2017
More Decks by color_box
See All by color_box
バグから生まれたgem太郎
colorbox
0
180
108-days-project
colorbox
1
1.5k
永和システムマネジメントのご紹介/introducing esm
colorbox
0
530
顔文字を3万個集める技術/kaomoji_over_30_thousand
colorbox
1
2.5k
Kataの作り方 / how to make Kata
colorbox
3
530
『esmメンバーの関心事_開発手法と開発環境編』/esm_member_concern.pdf
colorbox
0
510
2018オブラブカレンダー配布会
colorbox
0
1.3k
1人開発体制からチーム開発体制移行時にやることやったこと+α
colorbox
0
1.1k
Other Decks in Technology
See All in Technology
壊して学ぶAWS CDK: そのcdk deployで消えるもの、残るもの
k_adachi_01
1
470
それでも、技術なブログを書く理由 #kichijojipm / Why I Still Write Tech Blogs Even Now
shinkufencer
0
220
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
4
2.5k
_NIKKEI_Tech_Talk__勉強会は熱量では続かない___17回続いた輪読会の設計術.pdf
_awache
1
100
アップデートで何が変わった?デモで学んで使いこなすIBM Bob2.0
muehara
0
220
どこまでAIに任せるか 〜確率論と決定論の境界決定〜
shukob
0
440
OPENLOGI Company Profile for engineer
hr01
1
74k
人とエージェントが高め合う協業設計
kintotechdev
0
740
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.5k
SRENEXT_2026_Chairs__Talks_in_Tamachi.sre.pdf
srenext
1
140
プロダクト開発組織の現在地(Ver.2026/07) / product-organization
kaonavi
0
380
Amazon Quick 入門!
ysuzuki
2
130
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
How to Talk to Developers About Accessibility
jct
2
420
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
420
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
770
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
It's Worth the Effort
3n
188
29k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
900
WCS-LA-2024
lcolladotor
0
740
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
45k
Transcript
ؔܕݴޠͱࢲ • ϑΝϯΫγϣϯ۞ָ෦ • @color_box
ࣗݾհ • @color_box • ӬγεςϜϚωδϝϯτ • ͖ͳؔmap
ؔܕͷܦݧ • SML2ϲ݄ • Elixir3ϲ݄
ΞδΣϯμ • ࠷ॳʹ৮ͬͨؔܕݴޠ͔Βಘͨͷ • Elixirͷࣄ͔Βಘͨͷ
࠷ॳʹ৮ͬͨؔܕݴޠ • SML(StandardMetaLanguage) • 8͘Β͍લ • ֶੜ࣌ͷ՝
hd::tl • ͦΕ·Ͱ৮ͬͨ͜ͱͷͳ͍Ϧετͷѻ͍ํʹ ۤ࿑ͨ͠ • hd::tlͰϦετͷૢ࡞Λߦ͏֓೦Λशಘ • ؔܕݴޠʹର͢Δҙຯෆ໌ײ
ҙຯෆ໌ײ • ࠷ॳۤखҙ͕ࣝ͋ͬͨͷͷɺ՝Ͱ50 ݸͷجຊతͳؔΛ࠶࣮ • ͓ͳ͡ΈͷؔΛ࣮ • flatten,foldl,foldr,flat,map,filter,split
੍ݶ • ҰͭͷؔఆٛͷΈͰɺಗ໊ؔΛΘͣʹ ߦ͏ͱ͍͏੍ݶ • جຊతͳॲཧΛѲ͠࠶ؼॲཧʹ׳ΕΔ͜ ͱ͕Ͱ͖ͨ
جૅ࿉͕େࣄ • ॳݟͰΑ͘Θ͔Βͳ͍֓೦͕ग़͖ͯͨΒ • ͔ΔൣғͰशಘΛਐΊͯɺ܁Γฦ͢ɻ • ͢Δͱɺͦͷ͏ͪཧղͰ͖ΔΑ͏ʹͳΔɻ
༨ஊ • ͦͷ࣌ͷ՝Ͱ࡞ͬͨͷΦηϩͷAI • min−max๏ɺα-β๏
AI • 8*8ͷϚεʹରͯ͠ɺͲͷϚε͕Ͳͷఔڧ͍͔ɺͱ ͍͏ධՁؔΛ࡞ɻ • ͋ͱɺͲͷϚεʹஔ͔Ε͔ͨΛ࠶ؼతʹνΣοΫ͠ ͍͖ͯɺ࠷ऴతʹ࠷ධՁͷߴ͍ɺϚεΛબ͢Δ • దͳධՁؔͰ͋Δఔਂ͘ಡΉͱউͯͳ͍ •
ίπ࢛۱ϚεͷධՁΛߴ͓ͯ͘͘͜͠ͱ
None
Elixirͷࣄ͔Βಘͨͷ
ͦͦElixirͱ • ؆୯ʹݴ͏ͱElixirErlangΛॻ͖ͨ͘͢͠ ͷ
ͦͦElixirͱ • ElixirErlangͱಉ͡VM্Ͱಈ࡞͢Δؔܕݴޠ • ErlangwhatappͳͲͷϢʔβʔ͕ଟ͍ΞϓϦέʔ γϣϯͰಈ࡞͍ͯ͠Δ • ErlangҰൠతʹॻ͖ਏ͍ɺशख़ʹ͕͔͔࣌ؒΔͱ͍ ͏ଆ໘͕͋Δ •
Elixirॻ͖ਏ͍ͱ͍͏Λղܾͨ͠ݴޠ
Elixir Conf • 2017/4/1 • Elixir Conf 2017 • Elixir/ErlangͷࣄྫΛͨ͘͞Μฉ͘
• ߴෛՙʹڧ͍ݴޠͱͷ͜ͱͰɺϩϚϯΛײ͡Δɻ • ͍͔ͭElixirΛͬͯࣄͯ͠Έ͍ͨͳͱࢥͬͨ
whaapp • ͪͳΈʹ • whatappͷϢʔβʔ9000ສ • ͦΕΛ50ਓͷΤϯδχΞͰࢧ͍͑ͯΔ • Ұਓ͋ͨΓ180ສϢʔβʔΛࢧ͑ΕΔܭࢉ •
ࣈ 2015/09
ࣄͰElixir • Ҋ֎ૣͦ͘ͷΑ͏ͳػձʹܙ·ΕΔ • 4,5݄ElixirͰࣄ
ࣄ্Ͱಘֶͨͼ • ࣄͰೋϲ݄͘Β͍ElixirΛ৮ͬͨͷͰͦͷ࣌ ͷݟΛڞ༗
mix • ElixirͷϏϧυπʔϧɺґଘཧπʔϧͱͯ͠ͷଆ໘͋Δ • ElixirٴͼErlangͷϥΠϒϥϦಡΈࠐΊΔɻ • ґଘղܾ࣌ʹϓϩδΣΫτͰ༻͢ΔϥΠϒϥϦͷίʔυ ΛϓϩδΣΫτԼʹclone͢Δ • ElixirͰ͑ΔϥΠϒϥϦʹ໌Β͔ʹϝϯς͞Εͯͳ͍
ͷ͋ͬͨΓ͢ΔͷͰҙ͕ඞཁɻ
ࣄͰͬͨϥΠϒϥϦ • Cowboy • Ecto
Cowboy • ϚΠΫϩαʔϏεͷҰ෦ͱͯ͠ͷAPIαʔόΛ ͜ΕͰ࡞ • ElixirͷWebFWͱͯ͠Phoenix͕༗໊͕ͩɺ ࠓճ࠾༻ͤͣ • ୯७ͳAPIʹPhoenixେ͖͗͢ΔͨΊ
Cowboy REST Flowchart • CowboyΛ͏ͳΒ͓͑ͯ͘ͱศར • ֤ίʔϧόοΫ͕ͲͷΑ͏ʹݺΕΔ͔͕Θ ͔Δ • https://ninenines.eu/docs/en/cowboy/1.0/
guide/rest_flowcharts/
None
Ecto • DB wrapper • DBଓʹ༻͠ɺύϥϝʔλόϦσʔγϣϯʹ༷ • ֎෦APIΛୟ͘ࡍͷϦΫΤετߏମΛEctoͰఆٛ(DB ͷอଘߦΘͳ͍) •
ϦΫΤετΛ࣮ࡍʹߦ͏લʹɺߏମʹηοτ͞Ε͍ͯ Δ͕ຊʹਖ਼͍͔͠ͷόϦσʔγϣϯΛߦ͍͔ͨͬͨ
ࠔͬͨ࣌ͷࢀরઌ • HexDocͱ࣮ΛݟΕ͍͍͔ͩͨΔɻ
HexDoc • ॳΊͯݟΔϥΠϒϥϦؔΛ͏࣌·ͣ ͜͜ΛݟΔɻ • Ұ௨ΓΛ௨͢ͱͳΜͱͳ͍͘ํ͕Θ͔ Δɻ
࣮ • ͦΕͰΑ͘Θ͔Βͳ͍࣮࣌ݟΔ • ϓϩδΣΫτͰ༻͢ΔίʔυdepsԼʹ શͯೖͬͯ͘Δ • ͔ͩΒͦͷؾʹͳΕશ෦ಡΊΔ
ErlangϥΠϒϥϦ • ElixirErlangͰॻ͔ΕͨϥΠϒϥϦ༻Մೳɻ • ErlangͷϥΠϒϥϦಡΉඞཁ͕͋Δ • ElixirΛ৮ΔʹErlangͷࣝඞਢ • ޙड़ͷύλʔϯϚονΛཧղ͍ͯ͠ΔͱɺErlang ͷίʔυͳΜͱͳ͘ಡΊΔΑ͏ʹͳΔɻ
σόοά࣌ͷ͋Ε͜Ε • iexίϚϯυͰ্ཱ͕ͪΔREPLڥ͕ศར • iex -S mixͰϓϩδΣΫτͷίʔυΛऔΓࠐΜ ͰREPLڥΛ্ཱͪ͛Δ͜ͱ͕Ͱ͖Δɻ • ࣗ࡞ͷΫϥεΛݺͼग़ͯ͠ɺςετՄ
ೳɻ
σόοά࣌ʹΑ͘͏ͷ • IO.inspects() • IEx.pry
IO.inspects() • ΦϒδΣΫτΛೖΕΕͦΕʹؔ͢ΔใΛ ు͖ग़ͯ͘͠ΕΔ • printσόοά࣌ʹଟ༻
IEx.pry • σόοΨ • εςοϓ࣮ߦͰ͖ͳ͍ • Ұ࣌ఀࢭͨ͠ՕॴͰҙͷΦϒδΣΫτͷத Λ֬ೝՄೳ
ϨϏϡʔͰʹ͚ͭͨͷ • ύλʔϯϚονͷॏཁੑ • ύλʔϯϚονͷࢦఠΛͨ͘͞Μ͍ͨɻ
ύλʔϯϚονͷछྨ • caseΛ͏λΠϓ • ؔͷγάωνϟͰϚονͤ͞ΔλΠϓ • =୯ମͰϚονͤ͞ΔλΠϓ
caseΛ͏λΠϓ • ࠷Ұൠతʁ • ୯Ұͷؔͷதʹଘࡏ͢Δ
ྫ
ؔͷγάωνϟͰϚονͤ͞ ΔλΠϓ • ෳͷؔΛఆٛͯ͠ɺݺͼग़࣌͠ʹͦΕΒ ͕ΓସΘΔ
ྫ
=୯ମͰϚονͤ͞ΔλΠϓ • ೖͰͳ͘ύλʔϯϚον
ྫ
Մಡੑͷ্ • ύλʔϯϚονΛ͏·͘͏ͱՄಡੑΛ্͛ ΕΔ
None
None
ྫ • ؔͷҾʹରͯ͠caseʹΑΔύλʔϯϚο νΛ͢ΔͷNG • ؔͷγάωνϟͰϚον͢Δ • ͜ΕʹΑͬͯݸʑͷ͕ؔখ͘͞ͳΓɺՄಡ ੑ্͕͕Δ
༨ஊ • ύλʔϯϚον͕Θ͔ΔͱErlangԿͱͳ͘ ಡΊΔΑ͏ʹͳΔ(ؾ͕͢Δ) • ύλʔϯϚονʹ͍ͭͯ৭ʑࢦಋΛड͚ͨ ޙɺhexͷErlangϥΠϒϥϦΛಡΜͰΈΔ ͱɺલΑΓಡΊΔΑ͏ʹͳ͍ͬͯΔɻ
ࠓͨ͜͠ͱ • ؔܕݴޠͷ࠷ॳͷนΛಥഁ͢ΔͳΒ৭Μͳ ؔΛ࠶࣮͢Δͱ৭ʑΘ͔ΔΑ͏ʹͳΔ • Elixir։ൃ࣌ͷ͋Ε͜Ε