それが論理演算「または」を表すことは知って||
いますが、その記号を選択した歴史を誰かが知っているかどうか知りたいです。たまたまキーボードの未使用の記号だったからでしょうか。
6 に答える
単一の垂直線「|」の原点 選言的な「または」を示すものとして。
ASCII文字履歴から:
縦線文字は、プログラミング言語を記述するためのバッカス・ナウア記法メタ言語を使用したコンピューティングの分野に導入されたと推測されています。また、1960年代初頭にAPLで使用され、OR演算子とほぼ同時にPL / Iに組み込まれ、連結演算子として2倍になりました。
ジョン・ワーナー・バッカス(1924年12月3日– 2007年3月17日)はアメリカのコンピューター科学者でした。彼は、最初に広く使用されている高級プログラミング言語(FORTRAN)を発明し、形式言語構文を定義するためにほぼ普遍的に使用される表記法であるバッカスナウア記法(BNF)の発明者であるチームを指揮しました。彼はまた、関数レベルプログラミングの研究を行い、それを普及させるのを手伝いました。
IBMのプログラミング言語設計者である彼は、BNF表記を使用して、現在ALGOL58として知られている新しいプログラミング言語IALの構文を記述するための「メタ言語式」を提案しました。
バッカス・ナウア記法では、式は記号のシーケンスおよび/または「|」で区切られたシーケンスで構成され、選択肢を示します。全体が左側の記号の可能な置換です。
<personal-name> ::= <name> | <initial>
ALGOL 58仕様では、Backusは元々垂直線を使用していませんでした。彼は「または」という単語をその上に線で使用しました(論理記号も同様です)。 ALGOL60に貢献したデンマークのコンピューター科学者であるPeterNaurは、いくつかの記号を標準のキーボードで入力できる記号に変更しました。彼の変更の中には、垂直線の追加がありました。(出典:「プログラミング言語の歴史」、リチャードL.ウェクセルブラット)
ただし、ALGOL 60仕様の後でさえ、ALGOLでまだ使用されているシンボルの例はたくさんあります。実際、1961年にASCII文字セットにバックスラッシュが追加されたため、ALGOLの論理演算子は次のようにスラッシュで入力できます
\/ /\
。シンボルはIBM 2741キーボードにあり、60年代半ばに利用可能になりました。
しかし、NaurがALGOL 60に垂直線を追加したという明確な証拠があります。1964年に公開された記事で(Knuth D。、「Backus Normal Form vs. Backus Naur Form」編集者への手紙、Communications of the ACM、Vol。7( 1964)。pp。735-736、ここで入手可能)、ドナルド・クヌースは、「バッカス・ナウアー形式」は、ナウアーの貢献により「バッカス・ナウアー形式」と呼ばれるべきであると主張しました。彼が言及した貢献の中には、or演算子としての垂直線の追加がありました。
これは1964年の記事の一部の画像です。右側の箇条書き(iv)に注意してください。
この記事では、1960年のAlgolレポートの編集責任の一部として、Naurがその意味変化に責任を負っていたと説明しています。
二重縦線「||」の原点
「C言語の開発」で、Dennis M. Ritchieは、二重垂直線演算子が追加された理由を説明しています。
言語に名前が付けられた後も、&&や||の導入など、急速な変化が続きました。演算子。BCPLおよびBでは、式の評価はコンテキストに依存します。式の値をゼロと比較するifおよびその他の条件ステートメント内で、これらの言語はand(&)およびor(|)演算子に特別な解釈を配置します。通常のコンテキストでは、ビット単位で動作しますが、Bステートメントでは
if(e1&e2)..。
コンパイラーはe1を評価する必要があり、それがゼロ以外の場合はe2を評価し、それもゼロ以外の場合は、ifに依存するステートメントを詳しく説明します。要件は&と|で再帰的に下降します e1およびe2内の演算子。このような「真理値」コンテキストでのブール演算子の短絡セマンティクスは望ましいように見えましたが、演算子のオーバーロードを説明して使用することは困難でした。アラン・スナイダーの提案で、&&と||を紹介しました メカニズムをより明示的にするための演算子。
(このセクションの調査をしてくれたRichard Brownに感謝します)。
それを導入したのはBCPL (wp)だったと思います。その前身のCPLには記号|
がありましたが、それを代替の行末コメントとして使用していました。
理由がどこかに書かれているという証拠は見つかりませんでしたが、それが唯一の選択であったかどうかを考えることができます(これは正当な理由になります)。
文脈自由文法 (wp)の概念が言語設計で非常に普及しているため、彼らは「または」という単語を選択しませんでした。そのため、有効な記号にはなり得ないものを選択しました(記号は[a-zA-Z_ ] + [a-zA-Z0-9 _] *または、通常は「-」を追加します)。
そこで彼らは、以前に定義された標準で定義されたすべての文字を調べました。(キャラクターは、自分で決定してペイントするだけでなく、標準にすでに存在している必要があることに注意してください。)彼らは3歳のASCIIだけでなく、EBCDICにも特に熱心に取り組みました。彼らは、以下から選択することはあまりないことに気づきました。
- アルファベット、アンダースコア、数字、スペースの他に、次のようなものがありました。
- NUL SOH STX ETX EOT ENQ ACK BEL BS TAB LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS USこれらはすべて端末制御文字として使用されていました(印刷不可)。
- ""(){} []は、&(100年以上にわたって'および'として使用されていた)と同様に、意味的に不適合でした。
- これらはすべてALGOLおよび/またはCPLで使用されました。#$%'* +、-。/:; <=>?@ \ ^ _〜
- 残ったのは`と| しかし、バックティックは、ASCII準拠であると主張されている場所でもどこでも利用できなかったため、使用できませんでした。
差出人:http://cm.bell-labs.com/cm/cs/who/dmr/chist.html
言語に名前が付けられた後も、&&や||の導入など、急速な変化が続きました。演算子。BCPLおよびBでは、式の評価はコンテキストに依存します。式の値をゼロと比較するifおよびその他の条件ステートメント内で、これらの言語はand(&)およびor(|)演算子に特別な解釈を行います。通常のコンテキストでは、ビット単位で動作しますが、Bステートメントでは
if(e1&e2)...コンパイラはe1を評価する必要があり、ゼロ以外の場合はe2を評価し、ゼロ以外の場合はifに依存するステートメントを詳しく説明します。要件は&と|で再帰的に下降します e1およびe2内の演算子。このような「真理値」コンテキストでのブール演算子の短絡セマンティクスは望ましいように見えましたが、演算子のオーバーロードを説明して使用することは困難でした。アラン・スナイダーの提案で、&&と||を紹介しました メカニズムをより明確にするための演算子。
| の最も古い用法 または、しばらくグーグルで調べた後、Backus Naur Formにあることがわかりました。
これは、1959 年に JW Backus によってZuerich ACM-GRAMM 会議で提案された国際代数言語の構文とセマンティクスの論文に最初に登場したようですが、彼は | を使用しませんでした。そこに表記。代わりに、彼は上線付きの「または」を使用しました。
その後、1960 年に彼はアルゴリズム言語 ALGOL 60 に関するレポートを書きましたが、この言語では既に | 表記が使用されていました。
それで彼はそれを1959年から1960年の間に発明しました。
「or」演算を表現するための垂直バーの使用 (論理の場合は ||、ビット単位の場合は |) は、BNFから派生した可能性があります。BNF はプログラミング言語ではありませんが、プログラミング言語構文の正式な仕様を作成する方法として 1950 年代後半に開発されました。BNF の縦棒文字は、非終端記号の有効な展開の選択を示します。60 年代以降のプログラミング言語の設計者は、この表記法に精通しており、影響を受けた可能性が高いです。
論理OR|| 記号は、実際には+プラス記号の分割から生じました。水平バーは90度回転したため、論理ORが誕生しました|| シンボル。それはずっと前に起こったので、あなたはこれがインターネットの中で文書化されているのを見つけるかもしれないし、見つけないかもしれません。ビットごとのOR| 、(ご想像のとおり)クロスバーは+プラス記号から削除されました。