为什么是"||" 或符号?

Ert*_*ohl 18 syntax history operators bitwise-or logical-or

我知道这||代表逻辑操作"或",但我很好奇是否有人知道选择该符号的历史.是不是因为它碰巧是键盘上未使用的符号?

Cam*_*man 34

单垂直线的起源"|" 表示析取"或".

ASCII字符历史:

据推测,使用Backus-Naur Form元语言将垂直线特征引入计算领域以描述编程语言.它也在1960年代早期在APL中使用,并且与OR运算符几乎同时并入PL/I,并且作为连接运算符加倍.

John Warner Backus(1924年12月3日 - 2007年3月17日)是一位美国计算机科学家.他指导了发明第一个广泛使用的高级编程语言(FORTRAN)的团队,并且是Backus-Naur形式(BNF)的发明者,这是几乎普遍用来定义形式语言语法的符号.他还在功能级编程方面进行了研究并帮助推广了它.

作为IBM的编程语言设计师,他提出了"金属语言公式"来描述新编程语言IAL的语法,现在称为ALGOL 58,使用BNF表示法.

在Backus-Naur形式中,表达式由符号和/或由"|"分隔的序列组成,表示选择,整体是左侧符号的可能替代.

<personal-name> ::= <name> | <initial>

在ALGOL 58规范中,Backus最初没有使用垂直线; 他使用了"或"这个词,上面有一条线(以及逻辑符号)或符号). 为ALGOL 60做出贡献的丹麦计算机科学家Peter Naur将几个符号修改为可以在标准键盘上输入的符号.他的变化包括增加垂直线.(来源:" 编程语言史 ",Richard L. Wexelblat)

然而,即使 ALGOL 60规范之后,也有很多例子或符号符号仍然与ALGOL一起使用.事实上,在1961年,ASCII字符集的反斜杠被添加,因此ALGOL的逻辑运算符可以用斜杠键入,如下所示: \/ /\ 符号可以在IBM 2741键盘上找到,可在六十年代中期使用:

IBM键盘

但是有明确的证据表明Naur在ALGOL 60中添加了垂直线.在1964年发表的一篇文章中,(Knus D.,"Backus Normal Form vs. Backus Naur Form"致编辑的信,ACM通讯,第7卷( 1964年.第735-736页,可在此处获得),Donald Knuth认为,由于Naur的贡献,"Backus Normal Form"应该被称为"Backus Naur形式".他提到的贡献包括增加垂直线作为运营商.

这是1964年文章的一部分图像.注意右侧是项目符号项(iv).

在此输入图像描述

这篇文章接着描述了Naur作为他对1960年Algol报告的编辑责任的一部分负责该语义变化:

在此输入图像描述

双垂直线"||"的起源

C语言的发展中,Dennis M. Ritchie描述了为什么增加了双垂直线运算符:

语言命名后,快速变化仍在继续,例如引入&&和|| 运营商.在BCPL和B中,表达式的评估取决于上下文:在if和其他条件语句中将表达式的值与零进行比较,这些语言对和(&)和或(|)运算符进行了特殊的解释.在普通的上下文中,它们按位运行,但在B语句中

if(e1&e2)......

编译器必须评估e1,如果它不为零,则评估e2,如果它也非零,则根据if详细说明该语句.需求在&和|上递归递减 e1和e2中的运算符.这种"真值"上下文中的布尔运算符的短路语义似乎是可取的,但运算符的重载很难解释和使用.在Alan Snyder的建议下,我介绍了&&和|| 运营商使机制更加明确.

(感谢Richard Brown对本节的研究).

  • 所以看来Naur在1958年到1960年之间的某个时候修改了Backus的符号,同时起草了ALGOL 60的语法描述,单词"或",上面有水平条.这是Algol 60语法的链接.http://www.csci.csusb.edu/dick/samples/algol60.syntax.html#logical_operator ALGOL 60语言中的逻辑OR运算符是单词"or",但竖线条用于元语言中用来指定ALGOL 60,它似乎从那里开始使用其他语言. (2认同)