それがパターンマッチングと呼ばれているかどうかさえわかりませんが、そこのルールに似たようなことをしたいと思います:
スペースで区切られた一連の名前である「機能」属性を持つ「オブジェクト」があります。例えば:
a.capability = "" // no pattern
b.capability = "foo"
c.capability = "bar"
d.capability = "foo bar"
e.capability = "bar lol truc bidule"
(各オブジェクトは他のオブジェクトとは異なるパターンを持つ必要があると仮定します)
次に、そのような属性を持つグローバル コンテキスト オブジェクトがあります。
context.capability = "" // 1
// OR
context.capability = "foo" // 2
// OR
context.capability = "bar" // 3
// OR
context.capability = "bar foo" // 4
// OR
context.capability = "lol" // 5
ここで、コンテキスト機能に「最もよく一致する」一意のオブジェクトを 1 つだけ選択します。このために、次のルールに従います。
- オブジェクトにパターンがなく、かつコンテキストにパターンがない場合、このオブジェクトが選択されます。
- オブジェクトにパターンがなく、コンテキストにパターンがある場合、一致するオブジェクトが他になければ、このオブジェクトが選択されます。
- オブジェクトがコンテキストとまったく同じパターン名を持つ場合、そのオブジェクトが選択されます。
- コンテキスト パターンに含まれるパターン名の数が最も多いオブジェクトが選択されます。
例えば:
- コンテキストケース 1) :
a
が選択されます。 - コンテキストケース 2) :
b
が選択されます。 - コンテキストケース 3) :
c
が選択されます。 - コンテキストケース 4) :
d
が選択されます。 - コンテキストケース 5) :
e
が選択されます。
このルールが機能するかどうかをテストすることさえせずにこれを書いています。これは、私が定義したいものの単なるドラフトです。
私の質問:
- この種のアルゴリズムをどのように呼びますか? (正しい名前で将来の研究を行えるようにするため)
- そのようなルールはすでに定義されていますか? 誰かが以前に同様のルールを定義した可能性があるほど一般的に見えますが、オーバーロードルールを定義する言語標準の部分(C++標準など)以外にそのようなものは見つかりません。
- そのようなアルゴリズム/ルールの特性を調査する研究はありますか? それが私のユースケースにとって正しい方法であるかどうかはわかりませんが、おそらく正しい解決策のようです。ただし、この種の言語機能を実装した経験がないため、予想される問題に関するデータを確認したいと思います (ただし、これまでのところ何も見つかりません)。
ある友人が、AI、エキスパート システム、言語設計者とコンパイラの実装に関する本を何冊か調べることを提案しました。ただし、この特定の方法でデータを見つける方法についてのガイダンスは、非常に役立ちます。