1. ホーム
  2. syntax

[解決済み] なぜ"||"は "or "の記号なのですか?[クローズド]

2022-03-05 13:03:56

質問

知っている || 論理演算の "or "を表しているのですが、この記号を選んだ経緯を知っている人がいたら教えてください。たまたまキーボードで使われていない記号だったからなのだろうか。

どのように解決するのですか?

分離形("or")を示す一本の縦線"|"の起源。

から ASCII文字の歴史 :

縦書き文字が使われるようになったのは、1960年代からと推測されています。 バッカス・ナウル形式がコンピュータの分野に導入されました。 プログラミング言語を記述するためのメタ言語。また、この言語は 1960年代前半にAPLで使用され、PL/Iにほぼ同時に組み込まれた。 OR演算子と同時期に、連結演算子として2倍化されました。 演算子です。

ジョン・ワーナー・バッカス (1924年12月3日 - 2007年3月17日)は、アメリカのコンピュータ科学者である。最初に広く使われた高級プログラミング言語(FORTRAN)を発明したチームを率い、形式的な言語構文を定義するためにほぼ普遍的に使われている表記法であるバッカス・ナウア形式(BNF)の発明者である。また、関数レベルプログラミングの研究を行い、その普及に貢献した。

IBMのプログラミング言語設計者であり、現在ALGOL 58として知られている新しいプログラミング言語IALの構文をBNF記法で記述する"metalinguistic formulas"を提案した。

バッカス・ナウル形式では、式は記号の列および/または選択肢を示す'|'で区切られた列からなり、全体は左側の記号の可能な代入であることを示す。

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

ALGOL 58の仕様では、Backusはもともと縦線を使わず、"or"という単語の上に線を引いて使っていた(論理記号の ). ピーター・ナウル ALGOL 60に貢献したデンマークの計算機科学者であるS.A.T.は、いくつかの記号を標準的なキーボードで入力できるように変更した。 彼の変更の中には、縦線の追加も含まれている。 (出典: " プログラミング言語の歴史 "、リチャード・L・ウェクセルブラット(Richard L. Wexelblat)

偶数 の例はたくさんあります。 の記号は、今でもALGOLで使われている。 実際、1961年にASCII文字セットにバックスラッシュが追加され、ALGOLの論理演算子はこのようにスラッシュで入力できるようになりました。 \/ /\ この記号は、60年代半ばに発売されたIBM2741のキーボードで確認することができる。

しかし、ナウルがALGOL 60に縦線を追加した明確な証拠がある。 1964年に発表された記事(Knuth D., "Backus Normal Form vs. Backus Naur Form" Letters to the Editor, Communications of the ACM, Vol.7 (1964). pp.735-736, available こちら ドナルド・クヌースは、ナウアの貢献により、バッカス正規形をバッカス・ナウア形式と呼ぶべきであると主張しました。 彼が言及した貢献の中には、or演算子として縦線を追加したことが含まれています。

1964年の記事の一部を画像で紹介します。 右側の箇条書きされた④に注目。

この記事には、ナウルが1960年のアルゴール報告書の編集責任者として、この意味での変更を担当したと書かれている。

二重の縦線 "||"の起源。

C言語の発展 Dennis M. Ritchieは、二重縦線演算子が追加された理由を説明しています。

<ブロッククオート

言語が命名された後も、急速な変化が続いています。 という演算子が導入されました。BCPLとBでは 式の評価は文脈に依存します。 式の値を0と比較する条件文。 これらの言語では、and (&) と or (or)は特別に解釈されます。 (|) 演算子です。通常の文脈では、これらの演算子はビット単位で動作しますが Bステートメント

if (e1 & e2) ...

は、コンパイラがe1を評価し、それが0でなければe2を評価し、そして も0でなければ、ifに依存するステートメントを詳しく説明する。 この要件は、e1内の& および | 演算子に対して再帰的に降り注ぐ。 とe2がある。このようなブール演算子の短絡的なセマンティクスは 真理値」コンテキストは望ましいと思われるが、そのオーバーロードは の演算子は説明しにくく、使いにくいものでした。 の提案で Alan Snyder は、&& と || 演算子を導入して、この2つの演算子で 機構をより明示的にする .

(ありがとうございます リチャード・ブラウン このセクションの調査について)