我正在研究的应用程序是各种各样的“配置器”。它是用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之间的关系(例如,如果该功能为false,则其所有选项均为false)。在运行时,添加产品的特定规则。然后将所有用户的选择传递给函数,检索哪些项为真,哪些项为假。
我不知道我要问的所有含义,因为我刚刚进入Prolog,但我正试图避免走上一条糟糕的道路,并在此过程中浪费大量时间。
一些问题可能有助于针对我想要找到的内容:
- 这听起来有效吗?
- 我吠叫错了树吗?
- 尝试在运行时创建所有这些规则是否有任何缺点或顾虑?
- 有没有更好的系统来支持这种事情,我可能会挤进一个C#应用程序(确切地说是Silverlight)?
- 我还应该检查其他竞争系统吗?
- 你有关于这类事情的一般建议吗?
提前感谢您的建议!