我知道||
代表逻辑运算符"或",但我很好奇有没有人知道选择那个符号的历史。是因为它恰好是键盘上未使用的符号吗?
我知道||
代表逻辑运算符"或",但我很好奇有没有人知道选择那个符号的历史。是因为它恰好是键盘上未使用的符号吗?
来自ASCII字符历史:
有猜测认为,竖线字符是通过Backus-Naur形式元语言引入到计算领域的。它也在20世纪60年代早期被引入APL中,并在同一时间内并入了PL/I作为OR运算符和重复运算符。
约翰·沃纳·巴克斯(1924年12月3日 - 2007年3月17日)是一位美国计算机科学家。他领导了发明第一个广泛使用的高级编程语言(FORTRAN)的团队,并发明了Backus-Naur形式(BNF),这是几乎普遍用于定义形式化语言语法的符号。他还研究了函数级编程,并帮助推广了它。
他是IBM的一名编程语言设计师,提出了“元语言公式”来描述新编程语言IAL的语法,该语言今天被称为ALGOL 58,并使用BNF符号。在巴科斯-诺尔范式中,表达式由符号和/或序列组成,用 '|' 分隔开,表示选择,整个表达式可以替换左侧的符号。
<personal-name> ::= <name> | <initial>
在ALGOL 58规范中,Backus最初没有使用竖线;他使用了带有一条线的单词“or”(以及逻辑符号)。丹麦计算机科学家Peter Naur为ALGOL 60做出了贡献,修改了几个符号,使它们可以在标准键盘上输入。其中一个变化是添加了竖线。(来源:“Programming Languages History”,Richard L. Wexelblat)
\/ /\
这些符号可以在IBM 2741键盘上找到,该键盘于六十年代中期推出。
以下是1964年文章的部分图像。请注意右侧的项目(iv)。
在C语言的发展中,Dennis M. Ritchie描述了为什么添加了双竖线运算符:
在确定语言名称之后,快速变化仍在继续,例如引入了&&和||操作符。在BCPL和B中,表达式的求值取决于上下文:在if和其他将表达式的值与零进行比较的条件语句中,这些语言对and(&)和or(|)操作符进行特殊解释。在普通上下文中,它们按位操作,但在B语句中,|
,但将其用作替代的行尾注释。\/
。 - Michael Kay来源:http://cm.bell-labs.com/cm/cs/who/dmr/chist.html
在为语言命名后,快速的变化仍在持续,例如引入了 && 和 || 运算符。在 BCPL 和 B 中,表达式的求值取决于上下文:在 if 等条件语句中,它们会将 and (&) 和 or (|) 运算符进行特殊的解释来与零比较表达式的值。在普通上下文中,它们按位操作。而在 B 语句
if (e1 & e2) ... 编译器必须先评估 e1,如果它不为零,则评估 e2,如果 e2 也是非零值,则处理依赖于 if 语句的语句。对于 e1 和 e2 中的 & 和 | 运算符,要递归地满足该要求。在此类“真值”上下文中,布尔运算符的短路语义似乎很理想,但运算符的重载难以解释和使用。 在 Alan Snyder 的建议下,我引入了 && 和 || 运算符,使机制更加明确。
|
表示“或”中的第一个? - deceze通过一番谷歌搜索,我找到的最早将 | 用作“或”的用法是在巴克斯-诺尔范式(Backus Naur Form)中。
该范式最初出现在J.W. Backus于1959年发表的苏黎世ACM-GRAMM会议上拟议的国际代数语言的语法和语义一文中,但他没有在那里使用 | 符号。相反,他使用了一个上划线的“或”符号。
然后在1960年,他写了关于算法语言ALGOL 60的报告,其中已经使用了 |-符号。
因此,他是在1959年至1960年之间发明了这个符号。
使用竖线表示“或”操作(逻辑运算符为||,位运算符为|)可能源自BNF。 BNF不是一种编程语言,但它在20世纪50年代末期开发出来,作为一种创建编程语言语法正式规范的方法。 BNF中的竖线字符表示非终端符号的有效扩展之间的选择。很有可能60年代及以后的编程语言设计师熟悉这种符号,并受其影响。
逻辑 OR || 符号实际上是从 + 加号符号分裂而来的。水平线条被旋转了 90 度,因此诞生了逻辑 OR || 符号。你可能会发现这在互联网上没有记录,因为它发生得太久远了。对于位运算 OR |,(你猜对了)十字架被从 + 加号符号中移除了。
or
和 +
相等的理由是什么? - deceze
|
表示按位或而不是逻辑或。 - Grijesh ChauhanSQL
中,它是字符串连接运算符。 - user330315|
字符所占用的代码位置通常会有所不同。常见的是一个分割的竖线,我还记得一些其他类似“波浪线”的字符。但实际上没有其他字符可用,除非你选择APL路线。 - Hot Licks