Haskell中`True || True && False`返回True的原因及优先级疑问
布尔运算优先级与类型报错的解答
为什么不加括号结果不同?
布尔逻辑运算不是完全按左到右顺序执行,而是遵循运算符优先级规则:&&(逻辑与)的优先级高于||(逻辑或)。
- 带括号的
(True || True) && False:括号强制改变执行顺序,先算True || True得到True,再执行True && False,结果为False。 - 不带括号的
True || True && False:会先执行优先级更高的True && False得到False,再执行True || False,最终结果是True——这就是和你预期不符的核心原因。
为什么True || True && 8会报错?
&&和||作为严格的逻辑运算符,要求所有操作数必须是布尔类型(True/False)。你传入的8是数值类型,不符合运算符的类型要求,因此触发报错。
如果想用非布尔值做逻辑判断,部分语言(比如Python)的and/or运算符会基于值的“真值性”处理(非零数值被视为True),但&&/||通常是强类型检查的逻辑运算符,不接受非布尔操作数。
内容的提问来源于stack exchange,提问作者Anders Gustav Volkan Paul
相关产品推荐
相关产品推荐

