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
AIツールでどこまでデザインを忠実に実装できるのか
oikon48
6
3.4k
「使い方教えて」「事例教えて」じゃもう遅い! Microsoft 365 Copilot を触り倒そう!
taichinakamura
0
390
生成AI時代のセキュアコーディングとDevSecOps
yuriemori
0
100
Introduction to Bill One Development Engineer
sansan33
PRO
0
300
Digitization部 紹介資料
sansan33
PRO
1
5.5k
「れきちず」のこれまでとこれから - 誰にでもわかりやすい歴史地図を目指して / FOSS4G 2025 Japan
hjmkth
1
310
[Codex Meetup Japan #1] Codex-Powered Mobile Apps Development
korodroid
2
830
"プロポーザルってなんか怖そう"という境界を超えてみた@TSUDOI by giftee Tech #1
shilo113
0
200
Railsの話をしよう
yahonda
0
150
大規模サーバーレスAPIの堅牢性・信頼性設計 〜AWSのベストプラクティスから始まる現実的制約との向き合い方〜
maimyyym
10
4.8k
ビズリーチ求職者検索におけるPLMとLLMの活用 / Search Engineering MEET UP_2-1
visional_engineering_and_design
1
130
LLMアプリの地上戦開発計画と運用実践 / 2025.10.15 GPU UNITE 2025
smiyawaki0820
1
570
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Writing Fast Ruby
sferik
629
62k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Git: the NoSQL Database
bkeepers
PRO
431
66k
Automating Front-end Workflow
addyosmani
1371
200k
Designing for humans not robots
tammielis
254
26k
Typedesign – Prime Four
hannesfritz
42
2.8k
Embracing the Ebb and Flow
colly
88
4.8k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.5k
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 ЕܭࢉͷΠϯλϓϦλΛ࣮ͨ͠