在VB6中检测冲突数学运算符的函数
我开发了一个程序,根据州标准使用不同类型的保险范围生成保险报价。现在我想添加指定“规则”的功能。例如,我们可能有3种类型的覆盖范围(我们称之为UM、BI和PD)。有些州不允许PD大于BI,其他州不允许UM在没有BI的情况下存在。因此,我为用户添加了创建这些规则的功能,以便在生成报价时遵循规则,从而在程序生成报价时不会违反任何州的规定 问题 我不希望用户能够选择冲突的规则。用户可以选择任意VB数学运算符(>,=,B在VB6中检测冲突数学运算符的函数,vb6,logical-operators,mathematical-expressions,Vb6,Logical Operators,Mathematical Expressions,我开发了一个程序,根据州标准使用不同类型的保险范围生成保险报价。现在我想添加指定“规则”的功能。例如,我们可能有3种类型的覆盖范围(我们称之为UM、BI和PD)。有些州不允许PD大于BI,其他州不允许UM在没有BI的情况下存在。因此,我为用户添加了创建这些规则的功能,以便在生成报价时遵循规则,从而在程序生成报价时不会违反任何州的规定 问题 我不希望用户能够选择冲突的规则。用户可以选择任意VB数学运算符(>,=,B B>C C>A 如您所见,最后一条规则与以前设置的规则冲突。我的解决方案是在用户
感谢我的最佳选择是某种层次结构的规则树。当用户添加第一条规则(例如A>B)时,应用程序可以创建如下数据结构(LowerValue是一个映射,其键指向一个值列表): 现在,当用户添加下一个规则(B>C)时,应用程序可以检查B是否已经在任何lowerValues列表中(在本例中为a)。如果出现这种情况,C将添加到lowerValues['a'],并且lowerValues['B']也将被创建:
lowerValues['A'] = ['B', 'C']
lowerValues['B'] = ['C']
最后,当用户提供最后一条规则(C>A)时,应用程序检查C是否在任何较低的值列表中。因为它在B和A中,所以该规则无效
希望有帮助。我不记得VB中是否有某种映射。我想你应该试试Dictionary对象
为了实现这一想法,所有操作都必须在内部转换为简单类型。例如:
A > B
可以翻译为
B <= A
B一般来说,这是一个相当困难的问题。事实上,你想知道的是(显然)某一组算术上的一组命题方程是否为真。要做到这一点,你需要相当于“知道”算术的约束解算器。在VB6中不太可能找到,但你可以将其作为子进程调用
如果规则是仅在不等式(AA)上的命题方程,请仅用一种方法编写。
第二,尝试解决重言式的命题(看看你可能在VB6中笨拙地暗示什么)
如果命题不是重言式,那么现在你需要构建不等式链(例如,a>B>C)作为一个图并寻找循环。失败的地方是当命题有析取,例如(“a>B或B>Q”);您必须为每个析取组合生成一个不等式链,并丢弃不一致的析取。如果您丢弃所有析取,则集合是不一致的。请注意“A和B”之类的表达式;根据Demorgan定理,它们等价于“非A或非B”,例如,“A>B和B>Q”与当然,字典可能是我现在所做工作的一个很好的替代品……但是对于4个变量来说,它到底能起到什么作用呢?(*a>=B*bd*D=a)“D”不会出现在“A”下的字典中,因此这将绕过验证,但这是一个冲突。我确实喜欢翻译符号的想法……这可能会增加一些可能性。D已经在较低的[A]中,因此您可以在那里检测到冲突-您可能需要一个equals[]/notequals[]为了跟踪这些操作,@Robson-很喜欢你的想法,但需要更多的工作来充实=这将是一件痛苦的事情,因为它的表达能力像VB6一样有限。一些提示。在相等(=和)之间划分规则还有关系运算符。对于关系重新排列,所以只使用一个运算符,例如:<在这一点上,你有一个顺序BB <= A