drools语法和函数

以下是 Drools 规则引擎中一些常见的语法和函数介绍:

规则语法结构

规则头部(rule)

java

rule "ruleName"
    attributes
when
    // 条件部分(LHS - Left Hand Side)
then
    // 操作部分(RHS - Right Hand Side)
end

  • “rule” 关键字:用于定义一条规则的开始,后面跟着规则的名称(ruleName),规则名称需要是唯一的,方便在规则库中对其进行标识和管理。
  • “attributes” 部分:可以设置规则相关的属性,比如 “salience” 用于指定规则的优先级(数值越大优先级越高),示例:salience 10,还有 “no-loop” 属性用于避免规则的无限循环触发等情况,像no-loop true 。
条件部分(LHS - Left Hand Side)

  • 模式匹配(Pattern Matching)
    使用类似 Java 类的实例化语法结合约束条件来匹配事实(fact,即传入规则引擎的数据对象)。例如,假设有一个Person类,里面包含agename等属性,要匹配年龄大于 30 岁的人,可以这样写:

java

Person( age > 30 )

这里Person就是事实类型,括号内是对该类型实例属性的约束条件,并且可以同时设置多个约束条件,用逗号隔开,如:Person( age > 30, name!= "John" ),表示匹配年龄大于 30 岁且名字不是 “John” 的人。

  • 逻辑连接词
    • “and”(与):用于连接多个条件,表示所有条件都要满足。例如:

java

Person( age > 30 ) and Person( name == "Alice" )

意味着要同时匹配年龄大于 30 岁并且名字是 “Alice” 的人这个事实情况。

  • “or”(或):连接的条件中只要满足其中一个即可。例如:

java

Person( age > 30 ) or Person( name == "Bob" )

表示匹配年龄大于 30 岁或者名字是 “Bob” 的人就行。

  • “not”(非):对某个条件进行取反,匹配不符合该条件的情况。例如:

java

not Person( age < 20 )

即匹配年龄不小于 20 岁的人这个事实场景。

  • 存在性检查(Exists)和全称量词(Forall)
    • “exists”:用于检查是否存在满足特定条件的事实。例如:

java

exists Person( age > 30 )

表示只要有年龄大于 30 岁的人这个事实存在就行,不管有几个这样的人。

  • “forall”:表示对于所有符合某一条件的事实都要满足另外的条件。比如:

java

forall( Person( age > 20 ); Person( name!= "Tom" ) )

意思是对于所有年龄大于 20 岁的人,他们的名字都不能是 “Tom”。

操作部分(RHS - Right Hand Side)

在 “then” 后面的这部分是当 LHS 条件满足时要执行的操作,通常可以进行以下几种类型的操作:

  • 修改事实对象属性:例如,如果还是前面的Person类事实对象,要修改匹配到的人的年龄,可以这样写:

java

Person( $p : age > 30 )
then
    $p.setAge( $p.getAge() + 1 );
end

这里通过绑定变量($p)的方式获取到匹配的事实对象,然后调用其方法来修改属性值。

  • 插入新的事实对象:可以向规则引擎中插入新的事实,例如创建一个新的Order类的对象并插入,代码如下:

java

then
    Order newOrder = new Order();
    newOrder.setAmount(100.0);
    insert(newOrder);
end

  • 调用函数或方法:调用自定义的 Java 函数或者规则引擎提供的内置函数等,比如打印一些信息(使用System.out.println这个 Java 中的打印函数,在规则引擎中同样可以调用,前提是相关依赖已配置好):

java

then
    System.out.println("规则被触发了");
end

函数

内置函数

  • update:用于通知规则引擎某个事实对象已经被修改了,这样规则引擎会重新评估相关规则,看是否会因为这个事实的改变而触发其他规则。示例:

java

Person( $p : age > 30 )
then
    $p.setAge( $p.getAge() + 1 );
    update( $p );
end

  • retract:从规则引擎中移除指定的事实对象,不再参与后续规则的匹配等操作。例如:

java

Person( $p : age > 60 )
then
    retract( $p );
end

常用于当某个事实满足一定条件(比如达到某个过期、失效条件等)后将其从规则引擎中移除的场景。

  • collect:用于收集满足特定条件的一组事实对象,常和集合相关操作配合使用。例如,收集所有年龄大于 20 岁的Person对象到一个列表中:

java

$persons : collect( Person( age > 20 ) )
then
    // 可以对$persons这个集合进行后续操作,比如遍历等
    for ( Person p : $persons ) {
        System.out.println(p.getName());
    }
end
自定义函数

除了使用内置函数外,还可以在 Drools 中定义自己的函数,这些函数通常是用 Java 语言编写,然后在规则中调用。例如,定义一个计算两个整数之和的函数:

在 Java 中(假设规则所在的项目中有对应的 Java 类用于存放这些函数定义):

java

public class MyFunctions {
    public static int sum(int num1, int num2) {
        return num1 + num2;
    }
}

在规则中调用这个自定义函数:

java

rule "useCustomFunction"
when
    // 条件部分
then
    int result = MyFunctions.sum(3, 5);
    System.out.println("两数之和为: " + result);
end

以上只是 Drools 语法和函数的一部分常见内容,实际应用中,根据不同的业务场景和数据模型,还可以进行更复杂和多样化的语法运用以及函数调用,以实现强大的业务规则处理能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/943405.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp使用live-pusher实现模拟人脸识别效果

需求&#xff1a; 1、前端实现模拟用户人脸识别&#xff0c;识别成功后抓取视频流或认证的一张静态图给服务端。 2、服务端调用第三方活体认证接口&#xff0c;验证前端传递的人脸是否存在&#xff0c;把认证结果反馈给前端。 3、前端根据服务端返回的状态&#xff0c;显示在…

UE5仿漫威争锋灵蝶冲刺技能

这两天玩了一下漫威争锋Marvel Rivals&#xff0c;发现是UE5做的&#xff0c;对里面一些角色技能挺感兴趣的&#xff0c;想简单复刻一下技能功能&#xff0c;顺便复习一下学过的知识 首先把摄像机设置调整一下 CameraBoom里搜索lag 把摄像机延迟关掉 &#xff0c;这样摄像机就…

去除 el-input 输入框的边框(element-ui@2.15.13)

dgqdgqdeMac-mini spid-admin % yarn list --pattern element-ui yarn list v1.22.22 └─ element-ui2.15.13 ✨ Done in 0.23s.dgqdgqdeMac-mini spid-admin % yarn list vue yarn list v1.22.22 warning Filtering by arguments is deprecated. Please use the pattern opt…

Suno Api V4模型无水印开发「综合实战开发自己的音乐网站」 —— 「Suno Api系列」第14篇

历史文章 Suno AI API接入 - 将AI音乐接入到自己的产品中&#xff0c;支持120并发任务 Suno Api V4模型无水印开发「灵感模式」 —— 「Suno Api系列」第1篇 Suno Api V4模型无水印开发「自定义模式」 —— 「Suno Api系列」第2篇 Suno Api V4模型无水印开发「AI生成歌词」…

企业如何搭建安全的跨网文件安全交换管理系统

在数字化转型的浪潮中&#xff0c;企业对数据的安全性和流动性提出了前所未有的高要求。特别是在网络隔离的情况下&#xff0c;如何实现跨网的安全、高效的文件交换成为了众多企业迫切需要解决的问题。 这不仅是技术上的挑战&#xff0c;还涉及到企业内部管理流程的优化和安全策…

Torch.gather

1.官方文档 2.使用要点 输入index的shape等于输出value的shape输入index的索引值仅替换该index中对应dim的index值最终输出为替换index后在原tensor中的值 最终输出的shape和index的shape相同 根据dim的值 选择将index[i,j,k]这个结果替换input[i,j,k]里面对应的i or j or…

报警推送消息升级的名厨亮灶开源了

简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;减少企业级应用约 95%的开发成本&#xff0c;在强大视频算法加…

《解锁 Python 数据挖掘的奥秘》

《解锁 Python 数据挖掘的奥秘》 一、Python 数据挖掘基础&#xff08;一&#xff09;Python 基础与数据挖掘环境搭建&#xff08;二&#xff09;数据挖掘基本流程概述 二、Python 数据挖掘核心技术&#xff08;一&#xff09;数据收集与预处理技术&#xff08;二&#xff09;常…

如何通过 360 驱动大师检查自己电脑上的显卡信息

在深入探讨如何查看显卡信息之前&#xff0c;首先需要了解显卡的基本概念。显卡&#xff08;Graphics Processing Unit, GPU&#xff09;&#xff0c;是计算机中负责处理图形输出到显示器的重要硬件。根据其集成度和性能&#xff0c;显卡通常被分为两类&#xff1a; 集成显卡&…

深度学习目标检测算法之RetinaNet算法

文章目录 前言RetinaNet 算法原理1.RetinaNet 简介2.backbone 部分3.FPN特征金字塔4.分类和预测5.Focal Loss 结束语 &#x1f482; 个人主页:风间琉璃&#x1f91f; 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注…

[源码解析] 模型并行分布式训练Megatron (2) --- 整体架构

link [源码解析] 模型并行分布式训练Megatron (2) --- 整体架构 目录 [源码解析] 模型并行分布式训练Megatron (2) --- 整体架构 0x00 摘要0x01 启动 1.1 分布式启动1.2 构造基础 1.2.1 获取模型1.2.2 获取数据集1.2.3 步进函数 1.2.3.1 广播数据0x02 Pretrain0x03 初始化 3.1 …

点击标题滚动到指定模块

vue鼠标点击标题滚动到指定模块&#xff0c;如果滚动页面到指定模块的话标题同样改变颜色 <script> export default {name: ceshi,data() {return {activeSection: 0, // 默认激活第一个标题sections: [{ title: Section 1, content: Content for section 1 },{ title: S…

Kubernetes 镜像拉取策略全解析:如何根据需求选择最佳配置?

在Kubernetes集群里&#xff0c;拉取容器镜像是一个非常关键的步骤。这些镜像包含了应用程序及其所有需要的依赖项&#xff0c;Kubernetes通过拉取这些镜像来启动Pod中的容器。为了提升集群的稳定性、速度和安全性&#xff0c;Kubernetes提供了几种不同的镜像拉取策略。这篇文章…

【碳库】双碳目标下农田温室气体排放估算与模拟(从碳库模拟、机器学习方法、生命周期评价法(LCA)、经验模型和过程模型多个维度)

生态与农业是甲烷&#xff08;CH4&#xff09;、氧化亚氮&#xff08;N2O&#xff09;和二氧化碳&#xff08;CO2&#xff09;等温室气体的主要排放源&#xff0c;占全产业排放的13.5%。农田温室气体又以施肥产生的N2O和稻田生产产生的CH4为主&#xff0c;如何对农田温室气体进…

[计算机网络]OSPF协议

开放最短路径优先OSPF 1&#xff09;OSPF的工作方式 1>和谁交换消息 使用洪泛法&#xff0c;向本自治系统的所有路由器发送消息。 2>交换什么消息 发送的消息就是与本路由器相邻的所有路由器的链路状态&#xff0c;但这只是路由器所知道的部分信息。 链路状态就是说…

mysql进阶

存储引擎 MySQL体系结构&#xff1a; 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表而不是基于库的&#xff0c;所以存储引擎也可以被称为表引擎。 默认存储引擎是InnoDB。 相关操作&#xff1a; -- 查询建表语句 show create table ac…

Unity2021.3.16f1可以正常打开,但是Unity2017.3.0f3却常常打开闪退或者Unity2017编辑器运行起来就闪退掉

遇到问题&#xff1a; 从今年开始&#xff0c;不知道咋回事&#xff0c;电脑上的Unity2017像是变了个人似得&#xff0c;突然特别爱闪退掉&#xff0c;有时候还次次闪退&#xff0c;真是让人无语&#xff0c;一直以来我都怀疑是不是电脑上安装了什么别的软件了&#xff0c;导致…

linux系统上SQLPLUS的重“大”发现

SQL plus版本&#xff1a; [oraclepg-xc2 ~]$ sqlplus -v SQL*Plus: Release 19.0.0.0.0 - Production Version 19.3.0.0.0 操作系统&#xff1a;CentOS Linux 7 (Core) 数据库&#xff1a;Oracle 19c Version 19.3.0.0.0 同样的SQL脚本在windos CMD sqlplus 执行没问题。…

YOLO11改进-注意力-引入自调制特征聚合模块SMFA

本篇文章将介绍一个新的改进机制——SMFA&#xff08;自调制特征聚合模块&#xff09;&#xff0c;并阐述如何将其应用于YOLOv11中&#xff0c;显著提升模型性能。随着深度学习在计算机视觉中的不断进展&#xff0c;目标检测任务也在快速发展。YOLO系列模型&#xff08;You Onl…

js-000000000000

1、js书写的位置 - 内部 <body> <!-- 习惯把 js 放到 /body 的后面 --> <script> console.log(这是内部 js 的书写位置) alert(内部js) </script> </body> <body><!-- 习惯把 js 放到 /body 的后面 --><script>console.log(这…