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
0
240
関数型言語と私/function-and-me
2017-07-12 の(car (cdr ファンクション倶楽部)) で使用したスライドです。
color_box
July 12, 2017
Tweet
Share
More Decks by color_box
See All by color_box
バグから生まれたgem太郎
colorbox
0
150
108-days-project
colorbox
1
1.4k
永和システムマネジメントのご紹介/introducing esm
colorbox
0
470
顔文字を3万個集める技術/kaomoji_over_30_thousand
colorbox
1
2.3k
Kataの作り方 / how to make Kata
colorbox
3
460
『esmメンバーの関心事_開発手法と開発環境編』/esm_member_concern.pdf
colorbox
0
470
2018オブラブカレンダー配布会
colorbox
0
1.2k
1人開発体制からチーム開発体制移行時にやることやったこと+α
colorbox
0
1k
Other Decks in Technology
See All in Technology
Post-AIコーディング時代のエンジニア生存戦略
shinoyu
0
300
大規模プロダクトで実践するAI活用の仕組みづくり
k1tikurisu
4
1.6k
Error.prototype.stack の今と未来
progfay
1
180
レガシーで硬直したテーブル設計から変更容易で柔軟なテーブル設計にする
red_frasco
0
110
FFMとJVMの実装から学ぶJavaのインテグリティ
kazumura
0
140
Rubyist入門: The Way to The Timeless Way of Programming
snoozer05
PRO
7
520
QAを"自動化する"ことの本質
kshino
1
140
Redux → Recoil → Zustand → useSyncExternalStore: 状態管理の10年とReact本来の姿
zozotech
PRO
18
8.7k
[mercari GEARS 2025] Building Foundation for Mercari’s Global Expansion
mercari
PRO
1
140
膨大なデータをどうさばく? Java × MQで作るPub/Subアーキテクチャ
zenta
0
110
個人から巡るAI疲れと組織としてできること - AI疲れをふっとばせ。エンジニアのAI疲れ治療法 ショートセッション -
kikuchikakeru
4
1.6k
OSだってコンテナしたい❗Image Modeが切り拓くLinux OS運用の新時代
tsukaman
0
100
Featured
See All Featured
Building an army of robots
kneath
306
46k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
[RailsConf 2023] Rails as a piece of cake
palkan
57
6.1k
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.1k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Building Applications with DynamoDB
mza
96
6.8k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Agile that works and the tools we love
rasmusluckow
331
21k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
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։ൃ࣌ͷ͋Ε͜Ε