布尔

布尔逻辑

在此阅读关于布尔逻辑的详细内容。

Bool 是 Julia 中的布尔类型名,其值只能为 truefalse 之一。

运算

表达式名称
!x否定
x && y短路与
x || y短路或
x ⊻ y异或
x ⊼ y非与
x ⊽ y非或
julia> !true
false

julia> true && "foo"
"foo"

julia> false || "foo"
"foo"

julia> true || "foo"
true

后三者的使用与整数的位运算情况类似。

布尔在 Julia 中其实是整数的一类,其中 false 可以被提升为 0,而 true 可以被提升为 1。

julia> Bool <: Integer
true

julia> Int(false)
0

julia> UInt8(false)
0x00

julia> Int(true)
1

特别地,false 可以用于移除 NaN 状态:

julia> NaN * 0
NaN

julia> NaN * false
0.0

短路

短路是一个重要的特性,它是说:如果一个布尔逻辑表达式的第一个参数已经确定了整个表达式的值,则第二个参数根本不会被计算。

julia> a = 0
0

julia> false && begin a=1; a==2 end
false

julia> a
0

julia> true || begin a=1; a==2 end
true

julia> a
0

上例中 begin a=1; a==2 end 没有被计算,因此没有进行 a = 1 的赋值操作。

缺失

缺失类型 Missing 具有唯一的实例 missing。它表示其字面意思,即“值缺失”。[1]这一语义在数据科学中常被用到。

对于大部分数学函数,missing 会传递:

julia> missing == missing
missing

julia> missing + 8
missing

missing 有三种判断方式:

julia> ismissing(missing)
true

julia> isequal(missing, missing)
true

julia> missing === missing
true

特别地,对于 islessmissing 被认为比任何其它值大。

三值逻辑

三值逻辑是由 truefalsemissing 共同组成的。这里 missing 可以视作“未知是 true 还是 false”

对于短路运算符 ||&&,禁止将 missing 放在左侧,并满足短路规则。

julia> true || missing # 短路原则
true

julia> false || missing
missing

对其它逻辑运算,允许将 missing 放在左侧,并将它视作未知。

julia> missing ⊻ true
missing

julia> missing ⊻ missing
missing

julia> missing ⊼ true
missing

julia> missing ⊼ false
true

  • 1

    这与一些语言的 null 相似,但不完全相同