配列要素に角括弧を使用する習慣はどのように発展しましたか?


11

多くのプログラミング言語は、構文a[i]を使用してi配列、シーケンス、またはベクトルのi番目の要素を参照します。a具体的には、CおよびPascal(1960年代後半から1970年代初頭)はこれを行います。一方、Fortran(1950年代のもの)などの一部の初期の言語では、この規則を使用していません。また、私は少し数学を研究し、数学者は間隔に角括弧、配列と行列の添え字(または配列が負でない整数の関数と考えられる場合は通常の括弧)に添え字を使用します。

だから、私の質問です:配列の添え字用のこの角かっこは、どこで、どのように、どのようなコンテキストで開発されましたか?

注:Cでの中括弧の使用に関するこの質問の真似はまったくありません。



@gnat:これはどうしてだまされたの?
einpoklum

1
関連するが、だまされない。
ブラスター

1
2番目の上の答えは角括弧の歴史をカバーしています
gnat

1
@Paul Typo。xkcd.com/163を意味します(xkdcドメインは中国で登録されています)
1201ProgramAlarm 2018年

回答:


10

CとPascalの主な前駆言語はAlgolでした。その最初のバージョンは、配列の宣言と参照に角括弧を使用したAlgol 58でした。

Algolが括弧などではなく角括弧を使用した理由は3つあります。

  1. 彼らができたので。Fortranが設計された初期のIBMキーボードには、括弧しかありませんでした。これは、Algolが指定されるまでに変更されていました。
  2. Fortranの経験から、プログラマーは括弧の過剰な使用と混同されることが多いため、重要な構文の変更と見なされていました。
  3. Algolの背後にある意図は、アルゴリズムを記述するために使用され、標準の数学的表記に近づけることが理にかなっているということでした。

ほとんどの場合メモリのインデックス付けに配列を使用するCとは異なり、Algolではインデックスの下限と上限の両方を指定できました。繰り返しますが、これはより数学的な意図に沿ったものです。実際、Algolは何年もの間、疑似コードの事実上の言語でした。


しかし、角括弧は標準的な数学的表記に本当に近いのでしょうか?私がマッチを研究したとき、[x]は同等クラスに使用され、ベクトルまたは行列内の指示位置には使用されませんでした。
einpoklum 2018年

2
@einpoklum参照の添え字または上付き文字よりも宣言の範囲の方が多い。しかし、当時のテクノロジーでは実際に下付き文字や上付き文字を作成できなかったため、視覚的な一貫性を追求しました。そして、彼らは、たとえばAPLのように数学的な概念を目指していませんでした。彼らはかなり狭い枝であるアルゴリズムを明確に表現することを目指していました。
Alex

ああ、また、角括弧が間隔に使用されました。ある意味で、配列の範囲のようなものだと思います。また、Algolがこのカスタムを開始した場所であると確信していますか?
einpoklum 2018年

@einpoklum CとPascalでの角括弧の使用はAlgolからきていると思います。系統はかなりよく文書化されています。Algol 58の前身で、設計者が構文を採用したものがあるとしたら、私はそれを知りません。タイミングは考えられませんが、不可能ではありません。Algol 58はAlgol 60より前に実装されていなかったため、実装されていない言語がインスピレーションになった可能性があります。
Alex

5

これは興味深い読み物です:https : //en.m.wikipedia.org/wiki/Bracket

以下は私自身の観察です。

Cの設計者は、何百年もの間通常の筆記言語で使用されてきた文字や構成の意味を採用することに細心の注意を払いました。そうすることで、ASCII文字の非常に限られたサブセットで作業する必要がありました。西洋言語では、書かれたテキストでより多くのグループ化文字が使用されますが、これらはASCIIに変換されませんでした。

通常の言語では、括弧の意味はメインメッセージを中断せずにサイド情報を提供することです。これは、プロシージャを呼び出すときに意味があります。メインメッセージは実行されるアクションであり、サブ情報は引数です。

中括弧はグループ化に使用されます。「この単語の集まりは一緒に属し、他の単語とは区別されます」。したがって、コードのブロック、複合ステートメントにそれらを使用することは理にかなっています。

角括弧は、元のテキストを明確にし、コンテキストを提供するために、元のテキストの一部ではなかったテキストへの挿入に使用されます。または省略記号で省略を示します:[...]。「彼女(女王)は面白がっていなかった」。コンピュータプログラミングでは、提供されているコンテキストの一種であるため、配列のインデックス付けにブラケットを使用することは少し意味があります。「配列?どんな配列?まあ、具体的にはその要素」しかし、元の意味がコンピュータ言語での使用を完全に網羅していない場合でも、ASCIIに残されている他のオプションはそれほど多くありません。

したがって、配列のインデックス付けに角括弧を使用するようになったのは、先行技術と当時利用可能であったものの組み合わせだと私は思います。

[アレックスのコメントのために編集]

この情報筋によると、ASCIIは1963年に導入され、1968年に政府の承認を得ました。このwikiによれば、C言語の開発は1969年まで始まりませんでした。そのため、リッチー氏は、キャラクターを選ぶときに、広くサポートされているこの新しいASCIIと呼ばれる標準に注意を払っていたようです。

「多言語の母」であるアルゴールが強い影響力を持つと主張する他の回答もご覧ください。


私はあなたの言っていることは理解できると思いますが、ASCIIはCが設計されてから10年近く経つまで成文化されませんでした。より直接的な影響は、Cが設計されたPDP-11のキーボードでした。サポートされている文字を使用することには意味があります。配列の角括弧の使用は、BCPLおよびBを介してAlgolから直接発想を得ています。Pascalの場合も同様です。WirthはPascalを設計する前にAlgol-Wを実装しました。
Alex
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.