《程序员的数学:2逻辑》

本文属于《程序员的数学》读书笔记系列。

一 逻辑为何重要?

逻辑是消除自然语言的歧义、严密准确的记述事物的工具。

作者还以需求说明为例,介绍逻辑的重要性。需求都理解错了,自然做出来的东西不是产品想要的。

二 兼顾完整性和排他性

作者以巴士费用为例介绍。

能够判断对错的陈述句,叫做命题。命题正确时,称该命题为“真”,也称true,命题不正确时,称该命题为“假.也称false。

思考条件有没有遗漏,有没有重复。

画一个帮助思考。这个还是很有用的,有的项目中尤其是缴费跟有效期有关。直观文字不好理解,用数轴可以有效辅助思考。

注意边界值,这是容易犯错的地方。

没有遗漏,即具备完整性,说明该规则无论在什么情况下都适用;

没有重复,即具备排他性,说明该规则不存在矛盾之处。

if语句的条件分支,体现了“兼顾完整性和排他性的分解”。

简单的逻辑容易理解,复杂的逻辑容易出错。

下面来一起学习复杂逻辑的解法。

三 建立复杂逻辑

 我觉得这块总体上跟数学集合很多概念是一致的,或者是电子电路的与或非类似。作者用了真值表达式、文氏图来互相验证。

逻辑非 —— 不是A

“不是......”的命题运算称作非,英语中用not表示,假设某命题为A,则A的逻辑非表达式写作:

        ﹁ A(not A)

文氏图就是颜色反转,Java就是用!表示。

逻辑与 —— A并且B

“A并且B”的命题称作逻辑与,英语中用and表示,命题“A并且B”用逻辑表达式写作:

        A∧B(A and B)

● 仅当A和B都为true时,A∧B才为true

逻辑或 —— A或者B

“A或者B”的命题运算称作逻辑或,英语中用or表示,命题“A或者B”用逻辑表达式写作:

        A∨B(A or B)

● A和B至少有一个为true时,才为true

● 当A和B都为false时,才为false

异或 —— A或者B(但不是都满足)

“A或者B(但不是都满足)”的运算称作异或,英语中称作exclusive or,它和逻辑或相似,但是在A和B都为true或者false的情况下有所不同,它的逻辑表达式写作:

        A⊕B

● 当A和B不同时,才为true

相等 —— A和B相等

它的逻辑表达式写作:

        A=B

● 当A和B都为true时,A=B为true

● 当A和B都为false时,A=B为true

蕴含 若A则B

前面的都容易理解,合格相对难一些,我觉得这是为了让计算机做判断。

A=>B。

书上写的比较简单。直接说若A则B。真值表如下表示,看上去容易困惑。

写成熟悉的语法应该是if.... then ....

举个例子,你跟孩子承诺,如果考试100分,就可以买一辆滑板车。可以这样理解,A:考试100分,B买滑板车。

只有在A为true,B 为false情况下,才认为我失信于人,结果是false。否则,都是是true,尤其是在A为false情况下,B的结果与A无关。(你考试没考好,车子买不买都行),看下面的文氏图就是除了A为true,B=false的地方都是阴影。

四 德 摩根定律(反演律)

(﹁ A)∨(﹁ B)=﹁ (A∧B):“非A”或者“非B”和非“A与B”是等价的

(﹁ A)∧(﹁ B)=﹁ (A∨B):“非A”并且“非B”和非“A或B”是等价的

对偶性:

我们知道如下关系呈现对偶关系,可以认为是“非”的关系:

true    ←→    false

A        ←→    ﹁ A

∧        ←→    ∨

它们相互成对,这称作逻辑表达式的对偶性。

作者还介绍了使用卡诺图简化逻辑表达式。

五 含未定义的逻辑

        程序经常会因为发生错误,导致退出、崩溃等,得不到true和false中的任意一个值,为了能表示这种得不到的值的情况,又新引入了一个undefined的值。即true、false、undefined三值逻辑。

1、带条件的逻辑与(&&)
它使用运算符&&,将A和B的带条件的逻辑与表示为:A&&B

● 不包含undefined的行,A&&B与和A ∧ B相等;

● A为true时,A&&B与B相等;

● A为false时,A&&B恒为false;

● A为undefined时,A&&B恒为undefined。

在判断A与B的真假值时,应根据条件A看是否需要看B,因此称为带条件的逻辑与。

2、带条件的逻辑或(||)

它使用运算符||,将A和B的带条件的逻辑或表示为:A||B

● 不包含undefined时,A||B与A ∨ 相等;

● A为true时,A||B恒为true;

● A为false时,A||B与B相等;

● A为undefined时,A||B恒为undefined。

3、三值逻辑中的否定(!)

它的否定式写作:!A

● 不包含undefined时,!A和﹁ A相等;

● 若A为undefined时,!A恒为undefined。

4、三值逻辑的摩根定律

(!A)||(!B)=!(A&&B)

(!A)&&(!B)=!(A||B)
 

先到这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值