规则引擎 clara-rules

本文的主题是规则引擎,主要内容包括规则引擎的实现算法 rete算法,clojure开源的规则引擎clara-rules对规则的处理方式和特点,以及clojure edn文件格式处理等内容。
(在一段时间的思考之后,发现本文还是越写越乱,最后还是决定采用问答式来组织)

1.那么什么是规则引擎呢?

规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。—百度

这个定义说的已经比较充分了,可见规则引擎是一个比较通俗易懂的概念。规则引擎就是将推理逻辑从业务代码分离,使得业务代码更加模块化的一个软件,接受一组规则和输入的事实,输出业务决策。

2.规则引擎是怎样工作的?

我们知道,当规则变得复杂后,事实变得庞大后,有很多东西就很难绕清楚了,这个时候就需要算法来帮忙。很多规则引擎使用的算法都是rete算法,那么rete算法的核心思想是什么呢?rete算法其实是一个模式匹配算法,规则引擎的核心是Pattern Matcher(模式匹配器)。不管是正向推理还是反向推理,首先要解决一个模式匹配的问题。(推理是数学证明中非常常见的一个名词),比如说正向推理:

正向推理又称为正向链接推理,其推理基础是逻辑演绎的推理链,它从一组表示事实的谓词或命题出发,使用一组推理规则,来证明目标谓词公式或命题是否成立。实现正向推理的一般策略是:先提供一批数据(事实)到总数据库中,系统利用这些事实与规则的前提匹配,触发匹配成功的规则(即启用规则),把其结论作为新的事实添加到总数据库中。继续上述过程,用更新过的总数据库中的所有事实再与规则库中另一条规则匹配,用其结论再修改总数据库的内容,直到没有可匹配的新规则,不再有新的事实加到总数据库为止。
  

3.模式匹配看起来其实挺简单的,一般的匹配例子有哪些?

对于规则的模式匹配,可以定义为: 一个规则是一组模式的集合。如果事实/假设的状态符合该规则的所有模式,则称该规则是可满足的。 模式匹配的任务就是将事实/假设的状态与规则库中的规则一一匹配,找到所有可满足的规则。

比如说,正则表达式就是一种模式匹配(学习正则表达式的成本很高,学正则表达式那么酸爽的过程应该不会忘记(不过如果能从推理的角度来看正则表达式,就溶图很多));

/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/
匹配 HTML 标记。

\s*匹配空白字符0次或多次;
(\S+)匹配可连续非空白字符串,同时这个group就是后续被使用到的\1;
(\s[^>]*)?匹配一个以空白开始的不带”>”符号的字符串0次或者1次;这个是group2,\2;

另外,正则表达式也是clojure中的一种非常基本的数据类型,clojure中的匹配re-find、re-matcher等函数也是提供了一个模式匹配的过程。

举另外一个例子来说明匹配的这个概念,这个例子是浏览器渲染,这里面将CSS规则树匹配到DOM树,最终生成渲染树的过程就是一个匹配的过程,说不定很多浏览器的原理就是采用规则引擎来做的(:)要是我来做这个方面的设计,说不定我就使用规则引擎来做了。)

4.那么模式是什么?

模式其实就是规则中最小的原子单位。

5.模式匹配看起来听简单的,但是觉得rete算法很难,rete算法是什么?rete算法有什么特别的地方?

rete算法也就是一个网络,将传入的对象在网络上传播。首先根据规则集建立一个网络&

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值