If statement 一般来说,用一对嵌套的IFs替换AND是否会加快速度?

If statement 一般来说,用一对嵌套的IFs替换AND是否会加快速度?,if-statement,wolfram-mathematica,replace,If Statement,Wolfram Mathematica,Replace,我正在权衡两者之间的区别 If[condition1 AND condition2, A, B] 及 我的想法是:嵌套的IFs会更快 我的推理是:通过嵌套IFs,条件2仅在条件1为真时才进行计算。在我所做的工作中,这意味着条件2的计算次数将少于上面第一个选项中的计算次数 AND是通常的逻辑“AND”(当且仅当两个前提都为真时为真)。如果,我的意思是如果[条件,当条件为真,当条件为假] 我希望我的问题不是太不恰当;我相信有一些例子表明第一个选项会运行得更快。我只是希望总的来说有些事情是真的 谢谢

我正在权衡两者之间的区别

If[condition1 AND condition2, A, B]

我的想法是:嵌套的IFs会更快

我的推理是:通过嵌套IFs,条件2仅在条件1为真时才进行计算。在我所做的工作中,这意味着条件2的计算次数将少于上面第一个选项中的计算次数

AND是通常的逻辑“AND”(当且仅当两个前提都为真时为真)。如果,我的意思是如果[条件,当条件为真,当条件为假]

我希望我的问题不是太不恰当;我相信有一些例子表明第一个选项会运行得更快。我只是希望总的来说有些事情是真的


谢谢。

语言通常(但不总是)会有一个称为AND的功能,即只有当第一个操作数为真时,才会计算AND条件中的第二个操作数(同样对于OR,只有当第一个操作数为假时,才会计算第二个操作数)。但是,这取决于语言。

您是在询问特定语言还是一般语言

许多(但不是所有)语言都有短路
运算符,当它们知道答案时停止计算。对于
,这意味着如果左侧为false,则答案为false,而右侧则不需要计算。对于
,如果左侧为真,则答案为真,不需要计算右侧


对于没有短循环求值的语言,使用嵌套的
if
s可以提高速度,因为需要做的工作更少。这一改进是否值得让代码更难遵循将取决于具体情况。

Mathematica将使
的评估短路,如果在评估所有条件之前知道结果,则

通过使用(人为地)花费很长时间的条件,您可以看到这一点:

Timing[If[False && (Pause[10]; True), True, False]]
Timing[If[False, If[(Pause[10]; True), True, False], False]]
看到它们都在几分之一秒内返回,而不是在十秒钟内返回。

我对它们进行了计时

Nest[Defer@If[True, #] &, True, 300];
vs

If[True&&&&True,True];
这完全是矫枉过正,但仍然很有趣。嵌套的
If[]
语句比包含300个逻辑AND的
If[]
语句慢三倍。但是,当第一个
True
语句更改为
False
时,表被翻转,嵌套的
If[]
语句的速度快了三倍

Nest[Defer@If[True, #] &, True, 300];
If[True && << 298 >> && True, True];