2

それがパターンマッチングと呼ばれているかどうかさえわかりませんが、そこのルールに似たようなことをしたいと思います:

スペースで区切られた一連の名前である「機能」属性を持つ「オブジェクト」があります。例えば:

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. オブジェクトにパターンがなく、かつコンテキストにパターンがない場合、このオブジェクトが選択されます。
  2. オブジェクトにパターンがなく、コンテキストにパターンがある場合、一致するオブジェクトが他になければ、このオブジェクトが選択されます。
  3. オブジェクトがコンテキストとまったく同じパターン名を持つ場合、そのオブジェクトが選択されます。
  4. コンテキスト パターンに含まれるパターン名の数が最も多いオブジェクトが選択されます。

例えば:

  • コンテキストケース 1) :aが選択されます。
  • コンテキストケース 2) :bが選択されます。
  • コンテキストケース 3) :cが選択されます。
  • コンテキストケース 4) :dが選択されます。
  • コンテキストケース 5) :eが選択されます。

このルールが機能するかどうかをテストすることさえせずにこれを書いています。これは、私が定義したいものの単なるドラフトです。

私の質問:

  1. この種のアルゴリズムをどのように呼びますか? (正しい名前で将来の研究を行えるようにするため)
  2. そのようなルールはすでに定義されていますか? 誰かが以前に同様のルールを定義した可能性があるほど一般的に見えますが、オーバーロードルールを定義する言語標準の部分(C++標準など)以外にそのようなものは見つかりません。
  3. そのようなアルゴリズム/ルールの特性を調査する研究はありますか? それが私のユースケースにとって正しい方法であるかどうかはわかりませんが、おそらく正しい解決策のようです。ただし、この種の言語機能を実装した経験がないため、予想される問題に関するデータを確認したいと思います (ただし、これまでのところ何も見つかりません)。

ある友人が、AI、エキスパート システム、言語設計者とコンパイラの実装に関する本を何冊か調べることを提案しました。ただし、この特定の方法でデータを見つける方法についてのガイダンスは、非常に役立ちます。

4

1 に答える 1

0

あなたの質問に対する直接的な答えはありませんが、考えてみると、問題を組み立てる方法がいくつかあります。

  • ドキュメントの検索 (検索エンジンで使用されるものなど -- 分離クエリをすばやくランク付けするにはどうすればよいでしょうか?)
  • 非メトリック 最近傍(リンクは共通メトリック バージョン用です)
  • 0-1 線形計画法

そのため、この問題を表す用語は 1 つではないと思います。あまりにも多くの分野にとって興味深い問題です。3 つの分野 (Google など) については、確かに多くの研究があります。

于 2013-07-01T18:48:05.817 に答える