小さなプログラムでは、ユーザーは複数のタイプされた数式を挿入し、それらを結び付けて連立方程式のシステムを作成します。そして、次元が一致しない場合にエラーを報告するために、実行時の型チェックを導入したいと思います
基本的な型は何でもかまいません。たとえばPersons, Money, Money/Period, m^2/s^2
、実行時に文字列として入力されます。
Hindley-Milner 型推論について読みましたが、少し誇張されていると思いました。
私の考えは、次の 2 つのルールに依存することでした。
最初にトークン化し、次に
If (a + b) or (a-b) the dimensions must match! [a] = [b]
a*b の場合、個々の次元の数を追跡するという意味で、次元は「拡張」または「縮小」されます。
Person/Year * Money/Year * Money*Year^2 ===> Money(2) Person(1) Year(2) / Year(1)
次に、個々のカウントを減算Money(2) Person(1) Year(1)
します。final type
これは、ツリー ウォーカーとして実装できます。ここでは、次元の制約が (+/-) ノードごとにテストされ、単純化して最終的な答えが得られます。
これは、この問題を解決する良い方法ですか?