我有以下代码:
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 分支是个好主意?
所以我的问题是:“我在这里做错了什么,还是语言研究人员/开发人员实际上做出了错误的决定?”
第 4.5.7 条件表达式 管理 if 表达式 需要此结果,如动态语义 下所述。特别是所有谓词“都会被评估并产生 False”。结果是“if 表达式的值为 True”。 注释详细说明:“除非if表达式具有布尔类型,否则需要Else,因此最后一句只能适用于具有布尔类型的if表达式。”另请参见 在经典逻辑中,如果 𝑝 和 𝑞 都为假,为什么 (𝑝⇒𝑞) 为真?