我什至不确定它是否称为模式匹配,但我想做一些类似于规则的事情:
我有具有“能力”属性的“对象”,该属性是由空格分隔的名称序列。例如:
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) 中:
a
将被选中; - 在上下文情况 2) 中:
b
将被选中; - 在上下文情况 3) 中:
c
将被选中; - 在上下文案例 4) 中:
d
将被选中; - 在上下文案例 5) 中:
e
将被选中;
我在写这篇文章时甚至没有测试这条规则是否有效,这只是我想要定义的草稿。
我的问题:
- 你怎么称呼这种算法?(让我用正确的名字做未来的研究)
- 是否已经定义了这样的规则?它看起来足够通用,以至于有人以前可以定义类似的规则,但是除了定义重载规则的语言标准的一部分(如 C++ 标准)之外,我找不到类似的东西;
- 是否有研究探索此类算法/规则的特性?我不确定这是否是适合我的用例的正确方法,但它似乎可能是正确的解决方案。但是我没有实现这种语言功能的经验,所以我想看看我可能会遇到什么问题的一些数据(但到目前为止我找不到任何东西)。
一位朋友建议看一些关于人工智能、专家系统和语言设计器和编译器实现的书籍。但是,有关如何查找有关这种特定方式的数据的一些指导将有很大帮助。