Xml 为什么要使用;或;而不是",;“异或”;在定义上?

Xml 为什么要使用;或;而不是",;“异或”;在定义上?,xml,haskell,types,computer-science,definition,Xml,Haskell,Types,Computer Science,Definition,这可能是一个微不足道的问题,但我真的在任何地方都找不到答案。计算机科学中有一个惯例,我觉得很奇怪 In可以这样定义: data Bool = False | True QName ::= PrefixedName | UnprefixedName 在xml中,定义如下: data Bool = False | True QName ::= PrefixedName | UnprefixedName 可能还有更多类似的例子,但这应该足够了 通常,|(管道或棒材)应理解为或。

这可能是一个微不足道的问题,但我真的在任何地方都找不到答案。计算机科学中有一个惯例,我觉得很奇怪

In可以这样定义:

data Bool = False | True
QName   ::=   PrefixedName | UnprefixedName
在xml中,定义如下:

data Bool = False | True
QName   ::=   PrefixedName | UnprefixedName
可能还有更多类似的例子,但这应该足够了

通常,
|
(管道或棒材)应理解为
。但这似乎很奇怪<当A和B都为真时,代码>A或B也为真。虽然在第一个例子中它是有意义的(有一种可能性,某个东西同时是
真的
假的
,但我们隐含地假设了非矛盾定律),但在第二个例子中它不是这样的:某个东西要么是
前缀名
要么是
不固定名
,不可能两者都是

那么为什么经常这样说呢?为什么不使用独占或?有什么非常规的原因吗?

我认为这里“或”的意思是字面意义上的,而不是数学意义上的。使用术语“或”意味着该值可以有一个或另一个值。它不是一个旨在确定真值的运算符

虽然使用“或”运算符符号可能不完全合乎逻辑,但它在让读者理解这一点方面做得足够好。这种清晰性最终是一种语言所追求的。只要更多的读者能够将其解释为“文字”用法而不是“数学”运算符用法,使用或在文字意义上意味着作为一种语言,你在表达观点方面做得更好,使该方法优于使用XOR之类的方法。

我认为“或”的含义这里是字面意义上的,而不是数学意义上的。使用术语“或”意味着该值可以有一个或另一个值。它不是一个旨在确定真值的运算符


虽然使用“或”运算符符号可能不完全合乎逻辑,但它在让读者理解这一点方面做得足够好。这种清晰性最终是一种语言所追求的。只要有更大比例的读者能够将其解释为“文字”用法而不是“数学”运算符用法,使用或在字面意义上意味着作为一种语言,你在表达观点方面做得更好,使方法优于使用诸如XOR之类的东西。

这种
数据X=A | B
表示法不应该真正理解为逻辑或根本不应该理解(尽管这与直观意义相当吻合)。它真正的意思是,
X
a
B
的总和类型,即a。现在,布尔函数上的乘积运算实际上是AND,所以对偶函数自然是OR

尽管如此,布尔向量空间上的和运算实际上是异或运算,所以我们稍微转了一圈


我只是不想读太多
|
只是一个符号;在类C语言中,它碰巧也表示按位OR,但实际的逻辑OR通常表示不同,可以是
|

这个
数据X=A | B
符号实际上不应该被理解为逻辑或根本不应该被理解(尽管这与直观意义相当吻合)。它真正的意思是,
X
a
B
的总和类型,即a。现在,布尔函数上的乘积运算实际上是AND,所以对偶函数自然是OR

尽管如此,布尔向量空间上的和运算实际上是异或运算,所以我们稍微转了一圈


我只是不想读太多
|
只是一个符号;在类C语言中,它碰巧也表示按位OR,但实际的逻辑OR通常表示不同,可以是
|

|
用于在互斥选项列表中分隔项目的历史由来已久:

  • 正则表达式:
    a*|b*
    表示字符串可以是0或更多的
    a
    s或0或更多的
    b
    s,但不能两者都是

  • 用于表示上下文无关语法的Backus Naur形式:

    Expr ::= Term | Expr AddOp Term
    
    其中一个表达式可以是单个项,也可以是另一个表达式与带有加法运算符的项组合。(两者不能同时存在。)

  • 命令行程序的使用消息:

    git branch (-d | -D) [-r] <branchname>...
    
    git分支(-d |-d)[-r]。。。
    
    这里,
    git branch
    命令可以使用
    -d
    -d
    选项,但不能在同一调用中同时使用这两个选项

  • Haskell中的
    data
    语句延续了这一传统;它与将
    |
    用作逻辑或逐位运算符无关


    (如果有什么不同的话,
    用于按位
    可能是受巴克斯·诺尔形式的启发,在这种情况下,您可能会问为什么
    用于
    而不是
    异或

    |
    用于在互斥选项列表中分隔项目的历史由来已久:

  • 正则表达式:
    a*|b*
    表示字符串可以是0或更多的
    a
    s或0或更多的
    b
    s,但不能两者都是

  • 用于表示上下文无关语法的Backus Naur形式:

    Expr ::= Term | Expr AddOp Term
    
    其中一个表达式可以是单个项,也可以是另一个表达式与带有加法运算符的项组合。(两者不能同时存在。)

  • 命令行程序的使用消息:

    git branch (-d | -D) [-r] <branchname>...
    
    git分支(-d |-d)[-r]。。。
    
    这里,
    git branch
    命令可以使用
    -d
    -d
    选项,但不能在同一调用中同时使用这两个选项

  • Haskell中的
    data
    语句延续了这一传统;它与将
    |
    用作逻辑无关