是什么意思
x AND THEN y AND z
是吗
x AND THEN (y AND z)
(如果x为FALSE,y,z永远不会被评估) 或
(x AND THEN y) AND z
(如果x为FALSE,则跳过y,但可能会评估z) 在ada?
答案 0 :(得分:5)
x AND THEN y AND z
,但没有解释原因。从某种意义上说,and
和and then
具有相同的优先权,但这不是整个故事。
表达式的语法是:
expression ::=
relation {and relation} | relation {and then relation}
| relation {or relation} | relation {or else relation}
| relation {xor relation}
其中{ FOO }
表示FOO
出现零次或多次。
此语法专门设计为允许将这些运算符或控件表单中的任何一个链接在单个表达式(X and Y and Z
,A and then B and then C
)中,但禁止混合它们。因此,问题x AND THEN y AND z
中的表达是非法的,甚至不会出现它的含义问题。这条规则的要点正是为了避免在这种情况下出现混淆。
您只需要写(X and then Y) and Z
或X and then (Y and Z)
,无论哪个匹配您想要的内容。
同样适用于混合and
和or
:
X and Y and Z -- legal
X and Y or Z -- ILLEGAL
(X and Y) or Z -- legal
X and (Y or Z) -- legal
答案 1 :(得分:4)
短路运营商与其严格版本具有相同的优先权。
答案 2 :(得分:3)
作为Mrab&艾拉&垃圾已经说他们有相同的优势,但是没有指出明确是“然后”& “或者”运算符会在确定结果后立即返回表达式(完成评估)。
例如(伪代码):
if Almost_always_true_fn() or else costly_fn() then
do_stuff;
end if;
大多数情况下,只会评估第一个函数(Almost_always_true_fn),而只有当返回false 时,才会被执行。
将其与:
进行比较if Almost_always_true_fn() or costly_fn() then
do_stuff;
end if;
在这种情况下,将评估Almost_always_true_fn()和 expensive_fn()。
NWS。
答案 3 :(得分:3)
是的,在(x AND THEN y) AND z
中,始终会评估relation z
。