2021-03-06
話しているとき、「日記に書いたんですが」と言うことがありますが、「複雑だったりまとまらない概念を話すから日記を見て文脈共有してくれるとわかりやすいかもしれない」くらいの意味です
EvalML5
180行くらいの導出木を手書きしたけど割とできてしまった。そんなもんなんだろうか
https://gyazo.com/fe7b00c6a73a56b4537c96686c6758fa
再帰があると導出木が波動拳になる(目grep)
EvalContML1,4
継続を使って定義されたML1,4
意味論のノリがわかんなくて手で進めてから書いた
>>と=>の違いがわからんぞ??になったり、(4 + 5) >> { _ * (1 - 10)}ってどう先に進めばいいんだ???になったりした
式を継続に投げこむのか、値を継続に投げこむのかの違い
面白いのが、導出システムの実装にインタプリタが必要なかったこと
EvalML1だとifの条件を求めるのにインタプリタを使って値を計算してやっていたが、EvalContML1だと値が導出の判断として陽に現れるので必要なくなる?
これが継続を使った定義全般の特徴なのかきになるな
判断の中に出現する結果の値が導出を通して変化せず、継続が伸縮することで評価が発生してるからっぽい
値を直接評価しないで「継続」とかいう便利概念に全てを押し付けることで楽になっている
継続がプログラムの終了までの全てを知っているので、今知っている部分だけ評価を進めていけば正しいことになる
これだ!
実装として、不完全な導出木を許容するようにしてみたらかなり体験がよかった
導出システムを実装しながら、どの規則が実装されてないからうまくいかないのかがわかったり、何かが間違ってるときにとりあえずやってみた結果を見てどこを間違えているのか推測したりできるようになる
https://gyazo.com/6231f49f42a294e4e53b01022dd160c5
芸術か何かだろもう
そっちからなんだ