为什么在定义中使用"或"而不是"xor"?

jjj*_*jjj 1 xml computer-science haskell types definition

这可能是一个微不足道的问题,但我真的无法在任何地方找到答案.计算机科学中有一个我认为特殊的惯例.

haskell中,数据类型可以像这样定义:

data Bool = False | True
Run Code Online (Sandbox Code Playgroud)

在xml中,限定名称的定义如下:

QName   ::=   PrefixedName | UnprefixedName
Run Code Online (Sandbox Code Playgroud)

可能有更多类似的例子,但这应该足够了.

通常但是很好理解的是|(管子或棒钢)应被理解为or.但这似乎很奇怪.A or B当A和B都是真的时也是如此.虽然它使得在第一个例子感(有可能的东西是TrueFalse在同一时间,但我们暗含的假设不矛盾律),它并没有在第二:东西可以是一个PrefixedNameUnprefixedName它可以不是两个.

那为什么经常这样呢?为什么不使用独家或?有任何非常规原因吗?

lef*_*out 8

这种data X = A | B符号实际上不应该被理解为逻辑OR(尽管这与直观的含义非常相符).它真正的意思是,X和类型AB,即副产品.现在,关于布尔值的产品操作实际上是AND,因此双重自然是OR.

虽然那时候,布尔的矢量空间上的和运算实际上是异或,所以我们转了一圈...

我只是不会读太多.|只是一个象征; 在类C语言中,它恰好也意味着按位OR,但实际的逻辑OR通常用不同的方式表示,无论是它||还是?.