なのログ

だから見てて下さい・・・俺の・・・変身

型システム入門を読んでいます(第12回)

半年以上ぶり、TaPLのコーナーです(驚愕)
今回の内容は、7章「ラムダ計算のML実装」であります。Fsharpも超絶久しぶりに書きました。


昔に比べてVisualStudioのことがわかるようになっていました。(クソ恥ずかしい自白)


こんにちは。こんばんは。3連休です。残念ながら最終日。

えー、経緯です。(直球)(ダイレクト)(ダイジェストだけに)(は?)

書き下しますと。

「なんか最近暇だな~~~ ・・・あっ! TaPLやっか!!!!

です。唐突なテンション高めフリーライターみたいなデカ文字やめろ

まあ完全に「まだAndroidやることあんだろ」とか「Elm手を付けたとこやったんちゃうんか」とかあるんですが、
ぼくが感じる「やるべきこと」「やっていきたいこと」の上位にTaPLが突如躍り出たというだけです。
ちょうど前回長らく苦しんだ6章を終えて、次はたのしいたのしい実装の7章だったはずですからね。ウキウキですよ。

そんなわけで、前回の復習なんかからやっていきましょうか。

6章ってなんやったっけ

タイトルからいきますと、「項の名無し表現」と題されております。
4章までで数字を前後させつつゼロ判定だけする処理系を学んで実装して、
5章でラムダ抽象を覚えてパズルとしてこね回しつつ簡約規則を学んで、
それからの6章です。ラムダ抽象をコンピュータが扱いやすい形にしたいな?という章ですね。

で、それが「項の名無し表現」であります。 具体的には、ラムダ抽象の中の項に機械的命名規則をつけていこうぜという内容です。
その規則の中でのラムダ抽象の扱い方の規則なんかも出てきました。

集大成っぽいのがこのへんです。
f:id:nanoyatsu:20200322202319p:plain
「なんだこれ意味わっかんねえ」といったところだと思いますが、
(この後の実装にも使うので)それぞれの記号の処理のしかたも拾っておきましょう。(トップダウン的な紹介順)

[ -> ]このカッコと矢印のやつ。 f:id:nanoyatsu:20200322202721p:plain

上矢印のやつ。
f:id:nanoyatsu:20200322202515p:plain

これらに則って、実装していきます。

7章 ラムダ計算のML実装

コード内のコメントを記事の文章にしたい人生だった↓(gist) gist.github.com

ぶっちゃけコードを貼ってしまったらもう他に言うことがねえ。

前半がデータの木構造を解析して式情報を文字列に起こすところで、
// -- こっから[7.3評価]な --とかいうコメントからが簡約処理ですね。

f:id:nanoyatsu:20200322203207p:plain

無事動いたので終わり!はい!イエーイ!(?)

[bad index]を吐かせているところは、実装前に解析できると期待していた式を試した結果です。
動かしてみて、「束縛されていない変数(項?)は今回の処理の対象外や・・・たしかに・・・」となりました。実装中に気付け。

おわり

次は8章・・・の前に「Ⅱ部」に入るようです。おお。一区切りついたということですねこれは。
で、「Ⅱ部」の8章は「型付き算術式」だそうです。たぶん数字の前後とゼロ判定のやつに型がつきますね!やっと型だよ!

どうでもいいんですが、この作業に当たってVisualStudioとVScodeをいったりきたりしました。
最終的にはVSCodeでいいなって感じなんですが、プロジェクトの立ち上げとかで、正直ちょっとVisualStudioにも助けられたところがありました。たぶん自分の環境でdotnetかなんかへのパスがよくわからんことになってるだけなんですけど。よし、マジでどうでもいいな。

おしまい。