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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
AIエージェントの知識表現と推論に なぜグラフが使われるのか - 記号的AIの復権とニューラルAIとの統合
yohei1126
1
280
AIエージェントを前提としたプラットフォーム エンジニアリング:GKEで作るAgent-Ready Golden Path
legalontechnologies
PRO
1
150
新しい SLO が良い感じにハマっている話
z63d
4
2.1k
Service Connect 上のサービスに ECS Service の外側から到達できなかった話
ota1022
1
120
侵入は突然に 〜 IoTマルウェアと悪用される家庭の機器 ~ / When Intrusion Strikes: IoT Malware and the Abuse of Home Devices
nttcom
0
1.4k
TypeScript入門 2026
recruitengineers
PRO
1
250
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
120
[しろおび夏祭り2026] チャットするAIから、作業するAIへ - 使われ方の変化と、その裏側で起きていること
kk0n
0
1.6k
NetBoxを利用した作業効率化の試み_NetDevNight4
tnoha
0
460
攻撃と防御で学ぶAI時代のプロダクトセキュリティ演習
recruitengineers
PRO
1
300
今こそ聞きたいソフトウェア設計 ドメイン駆動設計再入門
masuda220
PRO
16
5.5k
Featured
See All Featured
The Invisible Side of Design
smashingmag
301
52k
The World Runs on Bad Software
bkeepers
PRO
72
12k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
420
The Curious Case for Waylosing
cassininazir
1
450
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
270
Accessibility Awareness
sabderemane
1
170
The Art of Programming - Codeland 2020
erikaheidi
57
14k
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։ൃ࣌ͷ͋Ε͜Ε