编程中的OR表达式是如何工作的
How does the OR expression in programming work
这个关于或门的奇怪问题在我使用计算机时突然出现在我的脑海中class,就是这个问题:
当我们在条件语句中添加一个或门,使得第一个指定的条件为真,下一个为假时,编译器在执行程序时会同时读取这两个条件吗?或者一旦它达到 true,它就会继续到下面的代码块?这可能是一个完全愚蠢的问题,但我很好奇。
示例:
if 1 < 2 or 3 != 3:
<Do Sttuff>
在上面的示例中,编译器只检查 1 < 2
还是也检查 3 != 3
?
当你写
if 1 < 2 or 3 != 3:
1< 2 为真,因此永远不会检查 3!= 3。整个表达式被认为是真实的。这叫短路。
不要将硬件中的“或”门与软件中的“或”表达式混淆。
你问了一个关于语言语义的问题,所以答案是:这取决于你如何定义你的语言的语义。
在逻辑中,我们通常(至少是经典逻辑和直觉主义逻辑)不关心:A or B <=> B or A,所以它们应该给出相同的结果,我们不关心可计算性。
当你想实现一种语言时,你可以根据需要定义你的语义。如今,大多数语言都有惰性评估,即计算可能的最小数量,即一旦我们得到结果,就不要计算剩余的表达式,但也有可能语言语义的定义不精确并且所以有效的计算取决于编译器。
这个关于或门的奇怪问题在我使用计算机时突然出现在我的脑海中class,就是这个问题:
当我们在条件语句中添加一个或门,使得第一个指定的条件为真,下一个为假时,编译器在执行程序时会同时读取这两个条件吗?或者一旦它达到 true,它就会继续到下面的代码块?这可能是一个完全愚蠢的问题,但我很好奇。
示例:
if 1 < 2 or 3 != 3:
<Do Sttuff>
在上面的示例中,编译器只检查 1 < 2
还是也检查 3 != 3
?
当你写
if 1 < 2 or 3 != 3:
1< 2 为真,因此永远不会检查 3!= 3。整个表达式被认为是真实的。这叫短路。
不要将硬件中的“或”门与软件中的“或”表达式混淆。
你问了一个关于语言语义的问题,所以答案是:这取决于你如何定义你的语言的语义。
在逻辑中,我们通常(至少是经典逻辑和直觉主义逻辑)不关心:A or B <=> B or A,所以它们应该给出相同的结果,我们不关心可计算性。
当你想实现一种语言时,你可以根据需要定义你的语义。如今,大多数语言都有惰性评估,即计算可能的最小数量,即一旦我们得到结果,就不要计算剩余的表达式,但也有可能语言语义的定义不精确并且所以有效的计算取决于编译器。