You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定位导致布尔表达式结果为False的对应子项位置

实现思路

1 预处理拆分

首先把输入的简化表达式字符串做结构化拆分:

  • 按空格分割字符串,过滤空值后得到元素序列,奇数位为布尔值,偶数位为逻辑运算符
  • 分别提取两个有序列表:
    • 原子布尔值列表:每个元素是转成bool类型的子项值,列表索引从0开始,对应原问题的子项位置为「索引+1」
    • 运算符列表:每个元素为and/or,长度比原子布尔值列表小1

2 按优先级拆分合取块

由于and优先级高于or,整个表达式天然等价于「多个纯and连接的合取块 用or连接」的结构,我们按or做分割即可得到所有合取块:

  • 遍历运算符列表,遇到or就做截断,把相邻的、被or隔开的原子布尔值归到同一个合取块中
  • 每个合取块需要记录块内每个原子对应的原始子项位置和布尔值
  • 示例:表达式True and False or True and True and False拆分后得到两个合取块:块1[(位置1, True), (位置2, False)],块2[(位置3, True), (位置4, True), (位置5, False)]

3 定位每个合取块的故障子项

已知整个表达式结果为False,说明所有合取块的运算结果都为False(or运算所有子项为False时整体才为False)。对于每个纯and连接的合取块,块结果为False的直接原因是块内存在值为False的原子:

  • 若只需要找直接导致块短路的子项:取块内第一个出现的False对应的原始子项位置即可
  • 若需要找块内所有故障子项:收集块内所有值为False的原子对应的原始子项位置
  • 示例:用户举例的True && True && False拆分后只有1个合取块,第一个False对应位置3,完全匹配预期

4 结果输出规则

可根据实际需求选择输出逻辑:

  • 只需任意一个根因:返回任意一个合取块的故障子项
  • 需全部根因:返回所有合取块的故障子项组成的列表
  • 需特定顺序的根因:对故障子项列表做排序后取对应值即可

内容的提问来源于stack exchange,提问作者Paolo Amato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:48:05