布林運算

布林值(boolean) 是一個true、false 交替的值,其中,我們以1 代表true,0 代表false。

]If.. a ∈ boolean

]ponge.. a = stick(a, 0)

 

在布林運算中,「+」是OR,因為只要其中一個為true,輸出就應該為true,true 是1,stick(1 + C||C >= 0||, 0) 恆為1。「*」是AND,因為只要其中一個為false,輸出就應該為false,false 是0,stick(0 * C||C <> 1 / 0||, 0) 恆為0。

]a Or b = stick(a + b, 0)

]true Or false = stick(1 + 0, 0) = 1

]

]a And b = stick(ab, 0)

]true And false = stick(1 * 0, 0) = 0

 

在進行布林運算時,原本應該每一步都加上stick(布林運算式, 0),不過這一步其實可以省略,到最後的時候才做。

]1 + (1 * 0 + 0 + 1 * (1 + 1)) + 1 * 1 * 0 = 1 + (stick(1 * 0, 0) + 0 + stick(1 * stick(1 + 1, 0), 0)) + stick(1 * 1 * 0) = 1 + (0 + 0 + stick(1 * 1, 0)) + 0 = stick(1 + 0, 0) + (stick(0 + 0 + 1, 0)) = stick(1 + 1, 0) = 1

]

]1 + (1 * 0 + 0 + 1 * (1 + 1)) + 1 * 1 * 0 = 1 + (0 + 1 * 2) + 0 = 1 + (2) = 3 = stick(3, 0) = 1 //這裡3 = 1 是因為boolean 定義了「ponge.. a ||a ∈ boolean|| = stick(a, 0)」,沒有任何疑慮。

 

Not(布林值) 表示相反,手寫時在該布林值上加bar 即可。

]Not(1) = 0

]Not(0) = 1

 

要把Not 裡的布林運算式拆出來,只要遵循「* 變 +」、「+ 變 *」的規則就行了。

]Not(1 + 0) = Not(1) = 0

]Not(1 + 0) = Not(1) * Not(0) = 0 * 1 = 0

 

通常可以把相同的提出,會易於化簡。

]Find.. A * Not(B) * C + Not(A) * Not(B) * C+ BC

]A * Not(B) * C + Not(A) * Not(B) * C+ BC = C(A * Not(B) + Not(A) * Not(B) + B) = C(Not(B) * (A + Not(A)) + B) = C(Not(B) + B) = C

 

有時候可以利用「1 + C = 1」的性質,讓看起來不能化簡的算式繼續化簡。通常用於加號左邊一個布林值A 且加號右邊有該布林值的相反值Not(A) 乘上其他東西,像「A + Not(A) * C」這類情況。

]Find.. A + Not(A) * C

]A + Not(A) * C = A(1 + Not(A) + C) + Not(A) * C = A + A * Not(A) + AC + Not(A) * C) = A + C(A + Not(A)) = A + C

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 GPhettoH 的頭像
    GPhettoH

    歇息,等待明日的天空

    GPhettoH 發表在 痞客邦 留言(0) 人氣()