单竖线“|”的起点表示析取的“或”。
来自ASCII character history:
据推测,竖线字符是
以巴科斯-瑙尔形式介绍到计算领域
用于描述编程语言的元语言。也被拍了
1960 年代初在 APL 中使用,并在大约
与 OR 运算符同时,并且作为连接加倍
运算符。
John Warner Backus(1924 年 12 月 3 日 - 2007 年 3 月 17 日)是美国计算机科学家。他领导的团队发明了第一个广泛使用的高级编程语言 (FORTRAN),并且是巴科斯-瑙尔形式 (BNF) 的发明者,这是一种几乎普遍用于定义形式语言语法的符号。他还研究了函数级编程并帮助推广它。
作为 IBM 的一名编程语言设计师,他提出了“元语言公式”来描述新的编程语言 IAL(今天称为 ALGOL 58)的语法,使用 BNF 表示法。
在巴科斯-瑙尔形式中,表达式由符号序列和/或用“|”分隔的序列组成,表示一个选择,整体是左边符号的可能替换。
<personal-name> ::= <name> | <initial>
在 ALGOL 58 规范中,Backus 最初并没有使用垂直线;他使用了“或”这个词,上面有一条线(以及逻辑符号)。 Peter Naur 是一位为 ALGOL 60 做出贡献的丹麦计算机科学家,他将几个符号修改为可以在标准键盘上键入的符号。他的变化之一是增加了垂直线。 (来源:“History of Programming Languages”,Richard L. Wexelblat)
即使在 ALGOL 60 规范之后,也有很多 符号的示例仍然与 ALGOL 一起使用。事实上,在 1961 年,ASCII 字符集添加了反斜杠,因此 ALGOL 的逻辑运算符可以用斜杠键入,如下所示:\/ /\ 这些符号可以在 60 年代中期的 IBM 2741 键盘上找到:
但有明确的证据表明,Naur 在 ALGOL 60 中添加了垂直线。在 1964 年发表的一篇文章中,(Knuth D.,“Backus Normal Form vs. Backus Naur Form”Lets to the Editor,Communications of the ACM,Vol . 7 (1964). pp. 735-736, available here),Donald Knuth 认为由于 Naur 的贡献,“Backus Normal Form”应该被称为“Backus Naur Form”。他提到的贡献之一是添加了垂直线作为或运算符。
这是 1964 年文章的一部分的图片。请注意右侧的项目符号 (iv)。
文章接着将 Naur 描述为对语义变化负责,这是他对 1960 年 Algol 报告的编辑职责的一部分:
双竖线“||”的起源
在The Development of the C Language 中,Dennis M. Ritchie 描述了添加双竖线运算符的原因:
例如,在语言被命名后,快速变化仍在继续
&& 和 || 的介绍运营商。在 BCPL 和 B 中,
表达式的评估取决于上下文:在 if 和 other 中
将表达式的值与零进行比较的条件语句,
这些语言对 and (&) and or
(|) 运算符。在一般情况下,它们按位操作,但在
B语句
如果 (e1 & e2) ...
编译器必须计算 e1,如果它不为零,则计算 e2,并且
如果它也非零,则详细说明依赖于 if 的语句。
需求递归地下降到 & 和 | e1 内的运算符
和e2。布尔运算符的短路语义
“真值”语境似乎是可取的,但
操作者难以解释和使用。 根据以下建议
Alan Snyder,我介绍了 && 和 ||运营商使
机制更明确。
(感谢Richard Brown对此部分的研究)。