【发布时间】:2011-04-01 17:23:17
【问题描述】:
给定一组两个或多个逻辑条件,是否可以通过算法确定其中一个将评估为 TRUE?例如:
# this should pass, since for every X, only one condition is taken
cond 1: (X >= 1.0)
cond 2: (X < 1.0)
# this should fail
cond 1: (X < 1.0)
cond 2: (X > 2.0)
# this should also fail, since X=1.0 would meet both conditions
cond 1: (X < 2.0)
cond 2: (X > 0.0)
# there may be more than one variable involved
cond 1: (X >= 1.0 && Y >= 0)
cond 2: (X < 1.0 && Y <= -1)
这些条件由特定领域的语言生成,用于确定下一个执行路径。即当执行树分成多个路径时,用户为每个选项组成一个条件,并且评估为真的条件确定要采用的路径。为了使模拟有效,这些应该只是任何给定值可以采用的一种可能路径。
目前,我在运行时评估这些条件,如果其中一个以上(或一个都不)为真,我会发脾气。
我希望能够在解析阶段检查错误条件(域语言到可编译源代码)。可能吗?如何验证条件?
更新
关于条件中可以包含的内容,在实践中范围相当广泛。这些都是可能的条件:
X >= Y && Y < ZX.within_radius(0.4)X IN some_arrayX * Y < Z
最终更新
似乎不可能找到涵盖所有可能条件的解决方案(或者至少,鉴于我的知识有限,在为该问题分配的时间内不可能)。有一天会重新审视这个,但现在接受让我走得更远的答案。
【问题讨论】:
-
NULL 可能吗?以下可能是一个很好的起点:en.wikipedia.org/wiki/Formal_verification
-
最后一个也应该失败不是吗?如果 X = 0 且 Y = 0,则这两个条件都是错误的。
-
@Chris:你是对的。谢谢。会更新。
-
@Lucero:(除非我误解了你的问题)NULL 不是每个条件的可能结果。每个条件都应该评估为真或假。
-
由于决策是决策树的一部分,您是否也必须包括父条件?例如,当您沿着
X > 2的路径前进时,随后的两个条件X < 1和X > 0不会发生冲突,但您的静态检查工具可能会报告它们会发生冲突。跨度>
标签: algorithm language-agnostic validation logic conditional-statements