是否可以仅使用AND,OR或NOT创建IF语句?

时间:2014-10-28 12:49:44

标签: if-statement operators

我有一种情况需要评估某些变量,但由于遗留问题,我无法访问IF ... ELSE。

是否可以仅使用&|!以及基本数学创建IF评估。

var1 = 1;
var2 = 0;
var3 = 1;

Psuedo示例我正在尝试使用and,或者不是。没有其他要求。

assert[ if (var1 == 1) then { var2 == 1 OR var3 ==1 } ] is true or false

assert [ if ( var1 = 0 ) then { var2 == 0 AND var3 == 0 ) ] is true or false

我一直在尝试各种组合,但如果有意义的话,我无法找出如何基于错误结果否定真实。我不需要其他,只要第一个var1设置为1,那么另一个拖车需要为1.

因为这些是数字,我确信我需要进行某种计算,但是无法真正找到IF在低级别上的工作方式。

2 个答案:

答案 0 :(得分:1)

if ((var1 and (var2 or var3)) or (!var1 and (!var2 and !var3)))

确定没有正确理解这个问题。为了在没有IF的情况下获得上述内容,您能否像这样拆分逻辑?我假设它不需要是一个单一的陈述。

varA = (var1 and (var2 or var3))
varB = (!var1 and (!var2 and !var3))
result = varA or VarB

答案 1 :(得分:1)

在具有逻辑AND和OR的短路评估的语言中,您可以使用它们来实现条件控制流,不需要if语句。这似乎不是你在做什么。

您似乎想要测试含义。例如,

var1 => var2 OR var3

如果您的语言支持implication testing directly,您就完成了。否则,我将向您展示如何使用标准布尔运算符实现。

可以通过注意如果不满足左侧来测试这些,则会自动满足暗示。

NOT var1 => holds

此外,如果符合右侧,也意味着满意

var2 OR var3 => holds

把它放在一起:

holds := (NOT var1) OR var2 OR var3

第二个含义减少到

holds2 := var1 OR ((NOT var2) AND (NOT var3))

应用DeMorgan给出

holds2 := var1 OR NOT (var2 OR var3)

将它们放在一起:

both_hold := holds AND holds2

并简化

both_hold := ((NOT var1) OR var2 OR var3) AND (var1 OR NOT (var2 OR var3))

识别模式

both_hold := var1 XNOR (var2 OR var3)

(在类C语言中,XNOR可以在布尔变量上表示为==

但是,这些都不符合您的简单语言描述

  

如果第一个var1设置为1,那么另一个拖车需要为1

听起来更像是

text_holds := (var1 XNOR var2) AND (var2 XNOR var3)