1

伪代码中的传统 if > then 关系:

if (x>y) {
then print "x is greater than y."

}

还有关系数据库。

或者只是视觉 if>then 表。可视化表格表示。

if>then 编程辅助也有树形或层次结构。

我正在寻找 if>then 构造的所有替代方案和风格,但最好是实用的。由于大多数人比符号结构更善于使用和记住视觉结构(表格与原始代码),因此我正在寻找最直观的方法来理论上以图形方式构建 if>then 规则引擎。

注意:我不是想实现这一点,我只是想了解理论上可以做什么。

4

2 回答 2

0

你的问题有点宽泛,我们可以从逻辑门到数学函数。我将重点关注这一点:

“我正在寻找最直观的方法来理论上以图形方式构建 if>then 规则引擎”。

首先,有两个警告:

  1. 最佳表示取决于可能规则的数量。适用于 3-4 规则的方法可能不适用于 30-40。
  2. 我会假装else条件不存在。

如果“X then Y”归结为:一个条件和一条指令,其执行取决于条件。假设X -> Y意味着“如果 X 为真,则执行 Y”。让我们创建两个集合:一个C包含所有可能的条件。另一个是I包含所有可能的指令。

有了这个心,X ∈ CY ∈ I。在您的具体情况下,可以Y ∈ C(可以是条件)吗?如果是这样,你有嵌套的 ifs。

嵌套 if 可以表示为由and运算符连接的条件链:

if (x > 3) {
  if (y > 5) {
    # do something
  }
}

可以写成:

if (x > 3 and y > 5) {
  # do something
}

如果您只考虑代码,那么当您有许多嵌套条件时后者可能会出现问题,但是当您使用图形时,嵌套(可能使用树状结构)可能看起来很混乱,而链接通常看起来像一系列指令(其中我认为更好)。

如果您不考虑在规则中嵌套(链接),那么连接元素(框、圆等)X -> Y是一种简单的工作方式。这取决于您想要获得的图形方式(请参阅下面的链接以获取一些示例)。

如果您正在考虑嵌套,那么我会想到三个随机的想法:

  1. 维恩图:视觉上很有吸引力,对超过 3-4 个条件无用。它们非常适合数据库表示。见:http ://share.mheroin.com/image/3i3l1y0S2F39
  2. 流程图:功能强大且易于阅读,创建起来不太麻烦。可以使用 10 多个元素失控。见:http ://share.mheroin.com/image/2g071j3U1u29
  3. 表格:正如您所提到的,表格是表示条件的一种不错的方式,只要您可以限制适用的规则集。这是取自 iTunes 的示例: http: //share.mheroin.com/image/390y2G18123q。“匹配以下规则的 [所有/任何]”可替代if/else.
于 2013-08-05T00:35:51.430 回答
0

我希望我正确地解释了这个问题。

一切最终都归结为比较,只是将这些比较分解为人类可管理的部分。有许多技术可以减少 if-then,或者至少将它们转换为更容易理解的东西。

一个例子是多态性。这将程序员从 if/then 的一个实例中解放出来(基本上是一个 switch 语句)。另一个例子是地图。地图的实现使用 if/thens,但可以使用所有数据预先填充地图并使用一段逻辑代码而不是使用 if/then 来区分。这转向了数据驱动的方法。另一个例子是 SQL;它只是一种语言,一种更高层次的结构,使我们能够以不同的方式表达条件和约束。如何选择表达这些条件取决于问题域。有些问题适用于传统的过程编程,有些适用于逻辑编程、声明式编程等。如果有许多级别的嵌套 if-thens,状态机方法可能会很好用。面向切面的编程试图解决不属于任何一个模块的模块中重复代码的问题;一个“交叉”的担忧。

我会读一些关于Programming Paradigms的书。做大量的研究,如果你遇到一个反复出现的问题,看看是否有另一种方法可以让你减少 if-thens 的数量。大多数时候,其他人遇到了同样的问题并提出了解决方案。

于 2013-08-04T23:00:22.067 回答