当前位置: 首页 > ds >正文

一个逻辑问题

g思考链接

https://juejin.cn/post/7005869798483558431

根据上面的思路 构造出来一个

构造出了这样的但如果我再加一条

保存的时候 变成了

信号1 > 2 and 信号1 == 2 and (BLE工作状态BleSts >= 4)

哎 我不是输入的不是一个且 一个或吗 怎么出来的却是两个and

答案是

因为 ops 是定义在当前节点上的逻辑操作符,它决定了它的子节点之间用 and 或 or 连接。

{
  "ops": "and",
  "children": [ ... , { "ops": "or", "children": [...] } ]
}

最外层是 and,所以所有一级子项(包括那个 or 节点)都用 and 连接。
内部的 or 节点只影响它自己的子项之间的连接方式。
所以输出是:

... and (BleDoorLockCmd < ...)

那如果我想输入A = 1 or B = 2 and(a==1)j就不行吗

在逻辑上是有歧义的,因为没有明确的优先级说明,不同系统可能解析方式不同。
但在你当前的 conditionToString 实现中,是无法直接表达这种混合逻辑优先级的结构的,原因如下:
 

你希望的是

A = 1 or B = 2 and a == 1

但这其实是

A = 1 or (B = 2 and a == 1)

也就是 and 的优先级高于 or,需要嵌套结构来表达优先级。

正确的结构应该是

{
  "ops": "or",
  "children": [
    {
      "key": "A",
      "op": "=",
      "value": "1"
    },
    {
      "ops": "and",
      "children": [
        {
          "key": "B",
          "op": "=",
          "value": "2"
        },
        {
          "key": "a",
          "op": "==",
          "value": "1"
        }
      ]
    }
  ]
}

输出A = 1 or (B = 2 and a == 1)

为什么你写不出来 A = 1 or B = 2 and a == 1?
因为当前结构不支持混合逻辑优先级,每个节点只能统一用 and 或 or 连接子项
如何表达 A = 1 or (B = 2 and a == 1)?
需要用嵌套结构,把 and 放在 or 的一个子节点里
是否需要改写 conditionToString?
不需要,当前函数已经支持嵌套结构,只需要构造正确的输入对象即可

你可以这样输入

const input = {
  ops: 'or',
  children: [
    { key: 'A', op: '=', value: 1 },
    {
      ops: 'and',
      children: [
        { key: 'B', op: '=', value: 2 },
        { key: 'a', op: '==', value: 1 },
      ],
    },
  ],
};
 

http://www.xdnf.cn/news/15858.html

相关文章:

  • 《设计模式之禅》笔记摘录 - 8.命令模式
  • Day06_C语言网络编程20250718mobus重点
  • gin数据解析和绑定
  • 门控线性单元GLU (Gated Linear Unit)
  • Go语言流程控制(if / for)
  • 一小时学习Redis
  • websocket案例 599足球比分
  • 海森矩阵(Hessian Matrix)在SLAM图优化和点云配准中的应用介绍
  • 实战指南|智慧无人机安防系统搭建全流程解析
  • 深入理解Linux文件操作:stdin/stdout/stderr与C语言文件函数全解析
  • PDF 拆分合并PDFSam:开源免费 多文件合并 + 按页码拆分 本地处理
  • 突破性量子芯片问世:电子与光子首次集成,开启量子技术规模化应用新篇章
  • 暑期自学嵌入式——Day05补充(C语言阶段)
  • 二分答案之第 K 小/大
  • Visual Studio编译WPF项目生成的文件介绍
  • 服务器mysql数据的简单备份脚本
  • 二、Dify 版本升级教程(LInux-openeuler)
  • iOS OC 图片压缩
  • vue2 面试题及详细答案150道(101 - 120)
  • 国产替代:ASP4644在电信通信设备中的测试与应用前景
  • Java类:BigDecimal 的用法:乘法
  • IDEA 2020.1版本起下载JDK
  • Logback 配置的利器:深入理解<property>与<variable>
  • vue2 面试题及详细答案150道(21 - 40)
  • 闭包的定义和应用场景
  • Rust实战:高效对接Postman API
  • Spring中的SpEL是什么
  • Springboot3整合Elasticsearch8(elasticsearch-java)
  • [2025CVPR-目标检测方向]FSHNet:一种用于3D物体检测的全稀疏混合网络。
  • Hive数据仓库工具