cerner/clara-rules: Clojure的业务规则引擎与专家系统


Clara 提供了一种更简单的方法来用代码表达领域知识,而无需企业规则系统的重量。Clara 是用 Clojure(Script) 编写的具有 Java 互操作性的前向链接规则引擎。它旨在通过以开发人员为中心的专家系统方法来简化代码。
Clara 为开发者重新制定规则,规则可以极大地简化业务逻辑,但通常以有限的迷你语言和复杂工具的形式出现。
简单的规则保持简单,但用户可以在需要时编写丰富的逻辑或调用外部库。
 
规则只是 Clojure 代码,可以像其他任何东西一样进行管理和重用。

(defrule work-approval
  "Check order approval."
  [WorkOrder (= type :repair)
             (= ?order-id order-id)]
  [:not [ApprovalForm (= ?order-id approved-id)
                      (= formname
"27B-6")]]
  =>
  (insert! (->MissingApproval ?id
"No 27B-6.")))

 
从 Java 轻松使用
只需将您的规则作为资源包含并使用 Java Beans 或 Clojure 记录作为事实。

List<QueryResult> results =
  RuleLoader.loadRules("clara.examples")
    .insert(facts)
    .fireRules()
    .query(
"clara.examples/approvals");

for (QueryResult result: results)
  System.out.println(result.getResult(
"?id"));

Clara 支持您期望从规则引擎获得的功能,例如支持真相维护 truth maintenance、 持久性、 规则激活解释rule activation explanations累加器以跨事实集进行推理accumulators to reason across sets of facts等。
 
Clara 是使用Leiningen构建、测试和部署的。