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
つくってあそぼ ラムダ計算インタプリタ / Implement an Interpreter ...
Search
KMC_JP
October 18, 2018
Technology
0
1.3k
つくってあそぼ ラムダ計算インタプリタ / Implement an Interpreter of Lambda Calculus
KMC例会講座 / 型無しラムダ計算のインタプリタを実装してみよう
KMC_JP
October 18, 2018
Tweet
Share
More Decks by KMC_JP
See All by KMC_JP
▽SKKで日本語入力▼ / SKK Input Method
kmc_jp
0
120
Google Photosにネットで拾ったイラストを溜め込む
kmc_jp
0
430
Other Decks in Technology
See All in Technology
Astro Islandsの 内部実装を 「日本で一番わかりやすく」 ざっくり解説!
knj
1
260
AgentCoreとLINEを使った飲食店おすすめアプリを作ってみた
yakumo
2
240
20年以上続く PHP 大規模プロダクトを Kubernetes へ ── クラウド基盤刷新プロジェクトの4年間
oogfranz
PRO
0
170
Embeddings : Symfony AI en pratique
lyrixx
0
160
開発チームとQAエンジニアの新しい協業モデル -年末調整開発チームで実践する【QAリード施策】-
qa
0
260
欠陥分析(ODC分析)における生成AIの活用プロセスと実践事例 / 20260320 Suguru Ishii & Naoki Yamakoshi & Mayu Yoshizawa
shift_evolve
PRO
0
390
DMBOKを使ってレバレジーズのデータマネジメントを評価した
leveragestech
0
240
RGBに陥らないために -プロダクトの価値を届けるまで-
righttouch
PRO
0
110
Windows ファイル共有(SMB)を再確認する
murachiakira
PRO
0
270
「捨てる」を設計する
kubell_hr
0
230
今日から始められるテスト自動化 〜 基礎知識から生成AI活用まで 〜
magicpod
1
140
The Rise of Browser Automation: AI-Powered Web Interaction in 2026
marcthompson_seo
0
310
Featured
See All Featured
First, design no harm
axbom
PRO
2
1.1k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.1k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
How to train your dragon (web standard)
notwaldorf
97
6.6k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
The Curious Case for Waylosing
cassininazir
0
280
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
110
Ruling the World: When Life Gets Gamed
codingconduct
0
180
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
New Earth Scene 8
popppiees
1
1.8k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1k
Transcript
ͭͬͯ͋ͦ͘΅ ϥϜμܭࢉΠϯλϓϦλ ,.$ྫձߨ࠲!VUHXLL
ࣗݾհ w !VUHXLL ͏͕ͨΘ͖͖ w ֶ෦ใֶՊճੜ w ϓϩάϥϛϯάݴޠʹؔ͢Δݚڀ w
&VSP5SVDL4JNVMBUPS
ࢀߟ <>6S[ZD[ZOFUBM-FDUVSFTPOUIF$VSSZ)PXBSE *TPNPSQIJTN 4UVEJFTJO-PHJDBOEUIF'PVOEBUJPOTPG .BUIFNBUJDT &MTFWJFS4DJFODF <>IUUQXXXLCFDFJUPIPLVBDKQdTVNJJDMBTT LFJTBOLJTPGUXBSFLPVHBLVMBNCEBQEG <>IUUQUUJDVDIJDBHPFEVdQMDMBTTFT$.4$
8JOUFSMFDUVSFTMFDQEG
͓͠ͳ͕͖ w ಈػ w Еܭࢉʹ͍ͭͯΖ͏ w ЕܭࢉͷΠϯλϓϦλΛ࣮͠Α͏
ಈػ w ЕܭࢉͷݟͨίϯύΫτͰ͔ͭදݱྗ͕ڧ͍ w ͔࣮͠͠Λͨ͜͠ͱ͕ͳ͍ w ΠϯλϓϦλΛ࣮ͯ͠ΈΑ͏ w จಡΉͷ͕ͩΔ͍ͱ͖ʹखΛಈ͔ͯͨ͠
͜ͷߨ࠲ͷత w ʮΈͳ͞Μ͕ීஈ͍ͬͯΔϓϩάϥϛϯάݴޠ ͷΠϯ λϓϦλ ͜ͷΑ͏ʹ࣮͞Ε͍ͯΔʯͱ͍͏࣮ײΛ࣋ͬ ͯΒ͏ w ЕܭࢉΛ࣮ͨ͠ͱ͖ͷͭ·͖ͣϙΠϯτΛڞ༗͢Δ
͓͠ͳ͕͖ w ಈػ w Еܭࢉʹ͍ͭͯΖ͏ w ЕܭࢉͷΠϯλϓϦλΛ࣮͠Α͏
ܕແ͠ Еܭࢉ w ܭࢉͷϞσϧԽͷͻͱͭ w ؔΛͭ͘Δ ந w ؔΛద༻͢Δ
w ͜Ε͚ͩͰͳΜͱνϡʔϦϯάશ
Е߲ w .YcЕY.c.. w Yม w ؔநӈ݁߹ЕYЕZ.ЕY ЕZ. w
ؔద༻ࠨ݁߹123 12 3 w దʹׅހΛՃ͑ͯΑ͍
͞·͟·ͳЕ߲ w ЕYY Z w ЕYЕZY w ЕYЕZЕ[Y[ Z[
ଋറมͱࣗ༝ม w ଋറม w ؔநʹΑͬͯଋറ͞Ε͍ͯΔม w ЕYЕZYZ[ͷଋറมY Z w ࣗ༝ม
w ଋറมͰͳ͍ͷ w ЕYЕZYZ[ͷࣗ༝ม[
มͷஔ w .<Y/> w ߲.ʹొ͢Δࣗ༝มYΛ w ࠩ͠ࢧ͑ͳ͍ൣғͰ ߲/ʹஔ͢Δ w ࠩ͠ࢧ͑ͳ͍ൣғͬͯͳʹʁ
มͷஔͷྫ w Y<YЕZZ>ЕZZ w Z<YЕ[[>Z Y㱠Z w Y[ ZY
<YЕXX> ЕXX [ Z ЕXX w ЕYY<YЕZZ>ЕYY w ЕZY<YЕ[[>ЕZЕ[[ Y㱠Z
Ћม w ЕY.ЋЕZ.<YZ> w ࠩ͠ࢧ͑ͳ͍ൣғͰҾͷม໊ຊ࣭Ͱͳ͍ w ЕYYͱЕZZΛ۠ผ͢Δඞཁͳ͍Ͱ͢ΑͶʁ
Ќ؆ w ͬ͘͟Γݴ͑ؔద༻ w ЕY. /.<Y/>
Ќ؆Λମײ͢Δ w EFGG Y SFUVSOY Y w G
w ͜Ε͋͘·ͰମײͰ͢
Ќ؆ ЕYЕZЕ[Y[ Z[ ЕYЕZY ЕYЕZY ЕZЕ[
ЕYЕZY [ Z[ ЕYЕZY Е[ ЕYЕZY [ ЕYЕZY [ Е[ ЕZ[ ЕYЕZY [ Е[ ЕZ[ ЕZ[ Е[[
ਖ਼نܗ w ͜ΕҎ্Ќ؆Ͱ͖ͳ͍߲ w ྫ w Y w ЕYY w
ЕYЕZY
͓͠ͳ͕͖ w ಈػ w Еܭࢉʹ͍ͭͯΖ͏ w ЕܭࢉͷΠϯλϓϦλΛ࣮͠Α͏
༷ w ೖྗЕ߲ͷจࣈྻදݱ w ग़ྗЌ؆ͷεςοϓͱਖ਼نܗ ͷΑ͏ͳͷ w ͭ͡ඞͣ͠ਖ਼نܗʹ؆͞ΕΔΘ͚Ͱͳ͍
w Ќ؆ͯ͠Έͯɼ߲͕มԽ͠ͳ͔ͬͨΒఀࢭ͢Δ
࣮ݴޠ w ݴޠ0$BNMΛ͏ w ͦͦ͜͜πʔϧνΣʔϯ͕͋Δ w Θ͕ͨ͠Α͘৮͍ͬͯΔ w ͍͜ͳ͍ͤͯͳ͍ͱࢥ͏ʜʜ
؆·ͰͷྲྀΕ τʔΫϯྻ -".#%"*%%05 ߏจ 'VO Y %F#SVJKOJOEFY 'VO ЕYЕZЕ[Y[
Z[ ЕYЕZY ЕYЕZY ЕYY ࣈ۟ղੳ ߏจղੳ %F#SVJKOJOEFYม Ќ؆
࣮ͷྲྀΕ τʔΫϯྻ -".#%"*%%05 ߏจ 'VO Y %F#SVJKOJOEFY 'VO ЕYЕZЕ[Y[
Z[ ЕYЕZY ЕYЕZY ЕYY ࣈ۟ղੳ ߏจղੳ %F#SVJKOJOEFYม Ќ؆
DGΠϯλϓϦλ τʔΫϯྻ *% Y &2/6. ߏจ 45.5 <"44*(/
Y > Ծػցίʔυ -0"% 4503& YY ࣈ۟ղੳ ߏจղੳ Ծػցίʔυͷม ධՁ ˞ͲΕ͘Β͍σʔλߏΛม͢Δ͔ઃܭʹΑΔ
Е߲ͷσʔλܕΛఆٛ͠Α͏ w .YcЕY.c.. w ࣮ʹམͱ͜͠Ή
Е߲ͷσʔλܕΛఆٛ͠Α͏ type id = string type term = |
Var of id | Fun of id * term | App of term * term
࣮ͷྲྀΕ τʔΫϯྻ -".#%"*%%05 ߏจ 'VO Y %F#SVJKOJOEFY 'VO ЕYЕZЕ[Y[
Z[ ЕYЕZY ЕYЕZY ЕYY ࣈ۟ղੳ ߏจղੳ %F#SVJKOJOEFYม Ќ؆
ߏจղੳ w ЕYYͷΑ͏ͳه߸ྻʹҙຯΛ࣋ͨͤΔ࡞ۀ w ЕYY'VO Y 7BSY w ݫີʹ͜ͷه߸ྻΛͦͷ··ѻ͏Θ͚Ͱͳ͍
ߏจղੳثΛ࣮͠Α͏ w NFOIJSΛ͏Α w ZBDDͷ0$BNM൛ͷ͍ͭ͢͝ w PDBNMZBDDͱ͍͏ͷ͋Δ w จ๏Λ#/'෩ͷͷͰهड़
τʔΫϯΛఆٛ͢Δ w .YcЕY.c.. w άοͱᛀΜͰඞཁͦ͏ͳτʔΫϯΛఆٛ͠Α͏ w *% ม w
-".#%" %05 Е w -1"3&/ 31"3&/ ׅހ w &0- Е߲ͷऴ
τʔΫϯΛఆٛ͢Δ %{ open Syntax %} %token <Syntax.id> ID %token
LAMBDA DOT %token LPAREN RPAREN %token EOL
จ๏Λఆٛ͢Δ w .YcЕY.c.. w άοͱᛀΜͰจ๏Λॻ͘ w NBJO&YQS&0- w &YQS-".#%"*%%05&YQSc"QQ&YQS w
"QQ&YQS"QQ&YQS"&YQSc"&YQS w "&YQS*%c-1"3&/&YQS31"3&/
จ๏Λఆٛ͢Δ %start main %type <Syntax.term> main %% main: Expr EOL
{ $1 } Expr: | LAMBDA i=ID DOT e=Expr { Fun (i, e) } | AppExpr { $1 } AppExpr: | e1=AppExpr e2=AExpr { App (e1, e2) } | AExpr { $1 } AExpr: | i=ID { Var i } | LPAREN e=Expr RPAREN { e }
࣮ͷྲྀΕ τʔΫϯྻ -".#%"*%%05 ߏจ 'VO Y %F#SVJKOJOEFY 'VO ЕYЕZЕ[Y[
Z[ ЕYЕZY ЕYЕZY ЕYY ࣈ۟ղੳ ߏจղੳ %F#SVJKOJOEFYม Ќ؆
ࣈ۟ղੳ w ͦͦЕYYͷΑ͏ͳจࣈྻͷ··ͩͱѻ͍ͮΒ͍ w ۭനจࣈΛແࢹ͢Δͱ͔ w ίϝϯτ͜͜ͰऔΓআ͔ΕΔ w -".#%"*% Y
%05*% Y ͙Β͍ʹ໌֬ͳྻͩͱΑ͍
ࣈ۟ղੳثΛ࣮͠Α͏ w PDBNMMFYΛ͏Α w MFYͷ0$BNM൛ w ϧʔϧΛਖ਼نදݱͰهड़
ࣈ۟ղੳϧʔϧΛఆٛ͢Δ { open Parser } rule main = parse
[' ' '\t']+ { main lexbuf } | ['\n'] { EOL } | ['a'-'z'] { ID (Lexing.lexeme lexbuf) } | '\\' { LAMBDA } | '.' { DOT } | '(' { LPAREN } | ')' { RPAREN } | eof { exit 0 }
࣮ͷྲྀΕ τʔΫϯྻ -".#%"*%%05 ߏจ 'VO Y %F#SVJKOJOEFY 'VO ЕYЕZЕ[Y[
Z[ ЕYЕZY ЕYЕZY ЕYY ࣈ۟ղੳ ߏจղੳ %F#SVJKOJOEFYม Ќ؆
%F#SVJKOJOEFYʹม͠Α͏ w ʜʜͬͯͳʹʁ
Ћม ࢥ͍ग़͢ w ʮଋറมͷ໊લຊ࣭Ͱͳ͍ʯ w ͍ͬΆ͏ߏจʹଋറมͷ໊લ͕͋Δ w దʹมͷ໊લͷ͜ͱΛߟ͑ͳ͍ͱ ؆݁Ռ͕ΊͪΌͪ͘ΌʹͳΔ w
ଋറมͷ໊લʹଋറ͞Εͨ͘ͳ͍ʂʂʂʂ
Ќ؆ ·͕͍ͪ ЕYЕZЕ[Y[ Z[ ЕYЕ[Y ЕYЕZY
ЕZЕ[ ЕYЕ[Y [ Z[ ЕYЕZY Е[ ЕYЕ[Y [ ЕYЕZY [ Е[ Е[[ ЕYЕZY [ Е[ Е[[ ЕZ[ Е[ЕZ[
%F#SVJKOJOEFYʹม͠Α͏ w ؔநʹΑΔଋറ͔Βͷωετͷਂ͞Ͱม͕Ұҙʹ ఆ·Δ w ͜͜ͰJOEFYͱ͢Δ w ЕYЕZYЕЕ w ЕYЕZЕ[Y[
Z[ ЕЕЕ w ͨͩࣗ͠༝ม์͓ͬͯ͘
%F#SVJKOJOEFYͷڧΈ w มͷ໊લΛߏจ͔ΒऔΓআ͘͜ͱ͕Ͱ͖Δ w ؆ͷաఔͰͷЋมΛߟ͑ͳͯ͘Α͍
%F#SVJKOJOEFYͷม w % ϵ / Y /ϵ Y ϵ
Y ͕ఆٛ͞Ε͍ͯΔ w % ϵ / Y Y ϵ Y ͕ఆٛ͞Εͳ͍ɼࣗ༝มͰ͋Δ w % ϵ / ЕY. Е % ϵ\Y/ ^ / . w % ϵ / 12 % ϵ / 1 % ϵ / 2 w %NBJO . % \^ .
%F#SVJKOJOEFYͷม w ྫ w %NBJO ЕYЕZY w % \^
ЕYЕZY w Е % \Y^ ЕZY w ЕЕ % \Y Z^ Y w ЕЕ ЕЕ
࣮ͷྲྀΕ τʔΫϯྻ -".#%"*%%05 ߏจ 'VO Y %F#SVJKOJOEFY 'VO ЕYЕZЕ[Y[
Z[ ЕYЕZY ЕYЕZY ЕYY ࣈ۟ղੳ ߏจղੳ %F#SVJKOJOEFYม Ќ؆
%F#SVJKOJOEFYͷЌ؆ w ػցతͳJOEFYͷૢ࡞ͱஔ͚ͩͰЌ؆͕࣮ߦ͞ΕΔ w ͳΜ͔͍ࣜ͢͝ w ࢿྉ<>Λࢀর
࣮ͷྲྀΕ τʔΫϯྻ -".#%"*%%05 ߏจ 'VO Y %F#SVJKOJOEFY 'VO ЕYЕZЕ[Y[
Z[ ЕYЕZY ЕYЕZY ЕYY ࣈ۟ղੳ ߏจղੳ %F#SVJKOJOEFYม Ќ؆
࣮ͨ͠ͷ w IUUQTHJUIVCDPNVUHXLLMBNCEBDIBNB
σϞ w aYaZa[Y[ Z[ aYaZY aYaZY w aYaZa[Y[ Z[
aYa[Y aYaZY ม໊Λม͚͑ͨͩ w aG aYG YY aYG YY ఀࢭ͠ͳ͍
ࠓޙͷ՝ w ܕΛ͚Δ w ࣮͕ͨ͠ߨ࠲Ͱলུ w ࣗ༝มͷѻ͍Λ͏·͘Γ͍ͨ
·ͱΊ w Еܭࢉʹ͍ͭͯͳΜͱͳ͔͖ͬͯͨ͘ w ЕܭࢉͷΠϯλϓϦλΛ࣮ͨ͠