2021-03-08
これ最悪なんですが、ReactをやっているときReactをやっているという感覚がなく、ただ式をいじって関数を書いているという感覚だけがある 「Reactだと〜」みたいな言説見るとカスがよになる コンポーネントガーみたいなことを考えはじめ/言いはじめると大抵よくなくて、純粋にこれは関数のI/Fの設計として適切か?ということだけ考える
宣戦布告だ
間違ってStream見てしまって終了するやつ
まあtosuke.iconはネタバレ見てもへ〜になるだけで実際に映画見に行く確率にはそんなに影響がないらしいです
EvalRefML3
https://gyazo.com/553ba8d86b886b03e59041bac8fb31d6
やっぱりトークナイザは手書きに限るな〜(半ギレ)
code:problem149
|- let f = ref (fun x -> x) in
let fact = fun n -> if n < 1 then 1 else n * !f (n - 1) in
let z = f := fact in
fact 3
let rec使わずに再帰しててキモすぎる
EvalRefML3、しんどかった
直接評価な規則なので導出器と評価器を別々に書く必要がある
ストアが絡んで規則が複雑
ストア上の位置を示す値Locに名前が付いているが、この名前は式の上には現れない
判断の上には現れるので、ストアが評価の中で伸びはするが縮みはしないことを利用して(GCとかない)、初期状態のストアと終了状態のストアを比較して新しく生えたLocを生えた順に持っているリストを作り、評価の中で受け渡した
ひどい
末尾再帰関数でリストを組み立てると再帰で辿っている構造と逆順のリストができるという現象があって、それを利用した関数を書いた。こんなことはあんまりない気がする
コード中ではflという名前で出てくる(free-Loc) 様々な細かい事象が発生したりしたのも辛かった
かけ算の規則の名前がこっそり変わっていたり
PolyTypingML4を作ってるところでTimesよりMultiplyのほうが正しいことに気付いたらしく、-Times系の規則が全部-Multになってる
じゃあPlusもAddにしろよ
演習システムのパーサの挙動と戦ったりした
While言語
型エラーが起きにくいような規則になっていてすごい
最後の最後で導出と評価を同時にやる手法が確立されたが、遅い。全てが遅きに失した
評価の判断には結果が含まれているが、これを除いた値を受け取って結果と導出を返すような相互再帰関数を各判断について書く
導出器では各判断について↑の関数を呼んで、返ってきた結果が自分の持ってる結果と一致しているならついてきた導出を採用する
へー