我正在开发的应用程序是一种“配置器”。它是用 C# 编写的,我什至编写了一个规则引擎来配合它。这个想法是有一堆命题逻辑语句,用户可以进行选择。根据他们选择的内容,其他一些项目变得需要或完全不可用。
命题逻辑语句一般采用以下形式:
A => ~X
ABC => ~(X+Y)
A+B => Q
A(~(B+C)) => ~Q A <=> B
符号:
=> -- Implication
<=> -- Material Equivalence
~ -- Not
+ -- Or
Two letters side-by-side -- And
我对 Prolog 很陌生,但它似乎能够为我处理所有的“规则处理”,让我摆脱我当前的规则引擎(它有效,但它不是那么快或容易保持我想要的)。
此外,所有可用选项都属于层次结构。例如:
Outside
Color
Red
Blue
Green
Material
Wood
Metal
如果隐含了第二级的项目(特征,例如颜色),则必须选择第三级的项目(选项,例如红色)。同样,如果我们知道一个特征是假的,那么它下面的所有选项也都是假的。
问题是每个产品都有自己的一套规则。建立一个包含这些运算符作为谓词的知识库,然后在运行时开始为产品构建所有规则是一种合理的方法吗?
我想象它可能工作的方式是建立组件、功能和选项的想法。然后设置 then 之间的关系(例如,如果特征为假,那么它的所有选项都是假的)。在运行时,添加产品的特定规则。然后将所有用户的选择传递给一个函数,检索哪些项目为真哪些项目为假作为输出。
我不知道我所问的所有含义,因为我刚刚进入 Prolog,但我试图避免走上一条糟糕的道路并在此过程中浪费大量时间。
一些可能有助于针对我想要找出的问题的问题:
- 这听起来可行吗?
- 我在吠叫错误的树吗?
- 尝试在运行时创建所有这些规则是否有任何缺点或顾虑?
- 有没有更好的系统来处理这种事情,我可以挤进 C# 应用程序(确切地说是 Silverlight)?
- 我应该检查其他竞争系统吗?
- 你对这类事情有什么一般性的建议吗?
提前感谢您的建议!