3

我需要将定义为 DROOLS .drl 文件的规则转换为 CLIPS .clp。

据我了解,应该可以将 DROOLS 规则转换为 ruleML,并将 ruleML 转换为 CLIPS .clp。

我很清楚这件事比在文件格式之间转换更复杂。但就我深入研究此事(阅读网上找到的论文和信息)而言,这应该是很有可能的。然而,这还不是我的领域(还),而且这件事对我来说太复杂了,如果没有实际的建议和例子,我就无法开始。

4

1 回答 1

3

如果您要在两种语言之间翻译相似的功能,那么您可以编写一个程序来进行翻译,或者使用搜索并最好用 grep 表达式替换。除非程序非常简单,否则您仍然需要做大量工作来检查和调整翻译(这需要两种语言的工作知识)。例如,下面的代码是从 IRL (JRules) 转换为 CLIPS 的规则。

我不熟悉可用于 ruleML 的工具,但如果有一些可用的工具甚至可以进行部分翻译,那么值得一开始使用。

when 
  {
   Phase ( name == "match" ) ;
   Rank ( ?p : value; process == "yes" );
   Technique ( name == "Hidden-Single"; rank == ?p ) ;   
   Possible ( ?v : value; ?r : row; ?pid : id );
   not Possible ( value == ?v; row == ?r; id != ?pid ) ;
   Possible ( ?v2: value; value != ?v; row == ?r; id == ?pid ) ;
   not Impossible ( id == ?pid; value == ?v2; rank == ?p ) ;
  }
then 
  {
   insert Impossible() { id = ?pid; value = ?v2; rank = ?p; reason = "Hidden Single";  }  
  }

(defrule hidden-single-row   
   (phase match)
   (rank (value ?p) (process yes))
   (technique (name Hidden-Single) (rank ?p))
   (possible (value ?v) (row ?r) (id ?id))
   (not (possible (value ?v) (row ?r) (id ~?id)))
   (possible (value ?v2&~?v) (row ?r) (id ?id))
   (not (impossible (id ?id) (value ?v2) (rank ?p)))
   =>
   (assert (impossible (id ?id) (value ?v2) (rank ?p) (reason "Hidden Single"))))
于 2013-06-04T02:12:15.620 回答