2

我有一个用户使用规则引擎构建的等价物。但是在显示规则列表时,我希望能够将每个规则“漂亮地打印”成看起来不错的东西**。在内部,当表示为字符串时,它们看起来像 s 表达式,所以想象一下:

(and (contains "foo" "foobar") (equals 4 (plus 2 2 )))

任何人都可以指出一个以可读方式很好地显示规则的程序吗?

** 也需要本地化,但我想我们会把它留作额外的功劳。

4

1 回答 1

1

也许可以查看正在开发 Attempto Controlled English (ACE) 的Attempto 项目。ACE 允许您用英语的子集编写规则。例如:

If "foo" contains "foobar" and "foobar" does not contain "foo" then 4 = 2 + 2.

ACE 解析器将此类规则转换为称为话语表示结构 (DRS) 的逻辑形式。对于上面的示例,它看起来像这样:

[]
   [A]
   predicate(A, contain, string(foo), string(foobar))-1
      NOT
      [B]
      predicate(B, contain, string(foobar), string(foo))-1
   =>
   []
   formula(int(4), =, expr(+, int(2), int(2)))-1

有一个称为 DRS 语言生成器的工具可以将 DRS 转换为 ACE。对于上述 DRS,您将获得:

If "foo" contains "foobar" and it is false that "foobar" contains "foo" then 4 = ( 2 + 2 ).

在您的情况下,您必须将您的规则表示形式转换为 DRS(这应该非常简单),然后您可以直接使用 DRS 语言器。上述工具在 LGPL 许可下可用

于 2008-11-04T19:14:54.400 回答