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.2k
つくってあそぼ ラムダ計算インタプリタ / 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
110
Google Photosにネットで拾ったイラストを溜め込む
kmc_jp
0
410
Other Decks in Technology
See All in Technology
EncryptedSharedPreferences が deprecated になっちゃった!どうしよう! / Oh no! EncryptedSharedPreferences has been deprecated! What should I do?
yanzm
0
480
OCI Oracle Database Services新機能アップデート(2025/06-2025/08)
oracle4engineer
PRO
0
180
要件定義・デザインフェーズでもAIを活用して、コミュニケーションの密度を高める
kazukihayase
0
120
サラリーマンの小遣いで作るtoCサービス - Cloudflare Workersでスケールする開発戦略
shinaps
2
470
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
500
20250912_RPALT_データを集める→とっ散らかる問題_Obsidian紹介
ratsbane666
0
100
Autonomous Database - Dedicated 技術詳細 / adb-d_technical_detail_jp
oracle4engineer
PRO
4
10k
AIエージェントで90秒の広告動画を制作!台本・音声・映像・編集をつなぐAWS最新アーキテクチャの実践
nasuvitz
3
340
【NoMapsTECH 2025】AI Edge Computing Workshop
akit37
0
230
複数サービスを支えるマルチテナント型Batch MLプラットフォーム
lycorptech_jp
PRO
1
870
LLMを搭載したプロダクトの品質保証の模索と学び
qa
0
1.1k
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
2
580
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
A Tale of Four Properties
chriscoyier
160
23k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.1k
KATA
mclloyd
32
14k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
Typedesign – Prime Four
hannesfritz
42
2.8k
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 ЕܭࢉͷΠϯλϓϦλΛ࣮ͨ͠