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

Lua实现后缀表达式求值错误:-2^2计算结果为4而非预期-4

问题核心原因

你对-2^2的后缀表达式转换预期本身就是错误的,且优先级配置不符合数学运算规则:

  • 数学中-2^2的运算顺序是先算幂运算2^2,再对结果取负,最终结果为-4,对应的正确后缀表达式应为2 2 ^ UMINUS,而非你认为的-2 2 ^(这个表达式对应的是(-2)^2,结果自然是4)。
  • 你当前的优先级配置把一元负号UMINUS的优先级设为3,高于幂运算CARET的优先级2,会强制解析器先处理取负操作,再处理幂运算,直接导致运算顺序错误。

修复方案

调整优先级表中UMINUS和CARET的优先级顺序,将幂运算的优先级设置得高于一元负号:

local PRECEDENCE = {
    [Token.Type.MINUS] = 0,
    [Token.Type.PLUS] = 0,
    [Token.Type.ASTERIK] = 1,
    [Token.Type.SLASH] = 1,
    [Token.Type.UMINUS] = 2,
    [Token.Type.CARET] = 3
}

调整后解析-2^2会得到正确的输出队列:

{
  2,
  2,
  CARET,
  UMINUS
}

对该队列求值即可得到正确结果-4。

补充说明

你使用在线后缀计算器得到结果4,是因为你输入的后缀序列本身对应的就是(-2)^2的运算逻辑,并非计算器计算错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:15:01