如果 Ada 中的表达式逻辑上不正确?

问题描述 投票:0回答:1

我有以下代码:

with Ada.Text_IO; use Ada.Text_IO;

procedure Main is
    FiveIsLessThanZero : Boolean;
begin
    FiveIsLessThanZero := (if 5 < 0 then 0 > 5);
    Put_Line (FiveIsLessThanZero'Image);
end Main;

并且打印出 TRUE。

我发现以下关于 if 表达式的解释:“else 分支是强制性的,除非 then 后面的表达式具有布尔值。在这种情况下,else 分支是可选的,如果不存在,则默认为 else True。”

我原以为程序会打印 FALSE。谁认为拥有一个默认为 True 的可选 else 分支是个好主意?

所以我的问题是:“我在这里做错了什么,还是语言研究人员/开发人员实际上做出了错误的决定?”

ada
1个回答
0
投票

4.5.7 条件表达式 管理 if 表达式 需要此结果,如动态语义 下所述。特别是所有谓词“都会被评估并产生 False”。结果是“if 表达式的值为 True”。 注释详细说明:“除非if表达式具有布尔类型,否则需要Else,因此最后一句只能适用于具有布尔类型的if表达式。”另请参见 在经典逻辑中,如果 𝑝 和 𝑞 都为假,为什么 (𝑝⇒𝑞) 为真?

© www.soinside.com 2019 - 2024. All rights reserved.