'不'和'假'有什么不同

时间:2012-02-21 04:15:26

标签: logic ocaml

之间有什么区别
if mi.(j) = false && m.(j).(i) = false

if not (mi.(j) && m.(j).(i))

因为我认为它具有相同的含义,但是当我运行代码时它会给我一个不同的答案。

4 个答案:

答案 0 :(得分:5)

mi.(j)为真,m.(j).(i)为假。

mi.(j) = false && m.(j).(i) = false
true = false && false = false
false && true
false

not (mi.(j) && m.(j).(i))
not (true && false)
not (false)
true

你可能想要not (mi.(j) || m.(j).(i))。这基本上是 DeMorgan法律的一个例子。

答案 1 :(得分:5)

if mi.(j) = false && m.(j).(i) = false

实际上与

相同
if not mi.(j) && not m.(j).(i)
根据德摩根的法律,这等同于

if not (mi.(j) || m.(j).(i))

答案 2 :(得分:0)

if mi.(j) = false && m.(j).(i) = false  not equal to  if not (mi.(j) && m.(j).(i))

代表

if not (mi.(j) && m.(j).(i)) 

你反对

的结果
  (mi.(j) && m.(j).(i))

'不'并不意味着错误,但意味着与声明相反。

希望它有所帮助。

答案 3 :(得分:0)

要回答基本问题,x=falsenot x之间没有区别。这两个表达式始终始终产生相同的结果。正如其他人所指出的那样,两位代码的实际问题是没有意识到你没有使用过DeMorgan的定律。第一个版本相当于

(not m.(j)) && (not m.(j).(i))

不一样
not ( m.(j) && m.(j).(i) )

我发现记住这种事情的最好方法是考虑真实世界的句子。如果我说“我想要一天不下雨而且不下雪。”这与说“我想要一天不下雨和下雪”不同。实际上相当于第一句的句子是“我想要一个既不下雨也不下雪的日子”。 (即不(下雨或下雪))。所以,你必须牢记你的逻辑。

这就是为什么等同于第一个语句

not ( m.(j) || m.(j).(i) )