コメントにしてくればいいのに
- http://twitter.com/_tad_/status/1398361369
- http://twitter.com/_tad_/status/1398365763
- http://twitter.com/_tad_/status/1398371056
まず、別に本質的な話をしてるわけじゃないのは、最初に書いておくべきだったとは思いますが。あとOCamlでプログラミングするときの話なので、OCamlでプログラミングしたことが無い人には意味不明ですね。すみません。
別々にテストできることと外から見えてほしいことは意味が違うって言われても、外から見えないものをどうやってテストすれば良いのかよくわかりません。というか、それより先に気になったのは、そもそも相互再帰してる関数をどうやって別々にテストするのかというところなんですが。私の場合、頭から必要そうなのを順々に書いていくんで、プログラムを書いてる途中でそういう部分集合ができることがあります。
構造体を作れば良いというのは、その通りなんですけど、それがめんどくさいから言ってるんです。めんどくさいというのは、
- そんなこと始めたら、操作のための関数名が長ったらしくなって嫌
- モジュール定義しても良いけど、たいしたプログラムでもないのに、関数名がまた長くなるのが嫌
ということです。
Env.push_lvar env x v
とか書くの嫌じゃないですか。何が嫌かって、長いのとEnvとenvが被ってるのが嫌です。
env#push_lvar x v
なら、モジュール名の4文字分、得しますし、変数名とモジュール名の重複もありません。
組にするのは、もし7つとか要素があったら一瞬でどれがどれかわからなくなるので、問題外です。7つある要素は、意味的に似たような値なのが多いので、同じ型の値だったりします。つまり、この時、型システムは無力です。
つーか、そんなのいいからPraggerのgem作ってくれよw