for文のforはなぜforなのか?

よく考えるとプログラミング言語で当たり前に使っているfor文のforは不思議な命名だ。

他のループで使う、whileやloopは繰り返しをする意味が含まれるからまだわかる。一方forは個人的なイメージではあるがループに関する意味は無さそうだ。

という感じになぜforなのか疑問が湧き上がってきた。

そこで今回はfor文のforはなぜforになったのかを調べてみた。

因みに一番最後に結論が書かれているので結論だけ気になる方は最後だけ見て頂けたら。

この結論は著者のyapattaの推論も含まれている。何か反論、意見があったら気軽にコメントして欲しい。自分が気づかなかったポイントを知れたら面白い。


まずforに一応ループ周りの意味が含まれるか辞書で調べてみた。自分がただforという単語に反復的な意味が含まれていることを知らなかったという可能性もある。

ejje.weblio.jp

10番目の意味で、

[時間・距離を表わして] …の間(ずっと); (予定期間として)…の間(は) 《★【用法】 この意の for はしばしば 《口語》 では略される》

というものを見つけた。確かに繰り返しの意味に近い気がするが理由として弱い。

どうやら意味を調べるだけでは拉致があかない、納得できる理由としては小さい。こういうのは歴史的経緯を調べるのが良さそうだ。for文の成立経緯。

ということで初めてfor文が使われた一般的なプログラミング言語を調べてみた。

そしたらこんなのを見つけた。

en.wikipedia.org

The name for-loop comes from the word for, which is used as the keyword in many programming languages to introduce a for-loop. The term in English dates to ALGOL 58

なるほど? forループの起源はALGOL58らしい。Wikipediaだけではどうも信用できないので他のサイトも漁ってみた。

thehistoryofcomputing.net

They went from May 27th to June 2nd in 1958 and initially called the language they would develop as IAL, or the International Algebraic Language. But would expand the name to ALGOL, short for Algorithmic Language.

(中略)

You would name a variable by simply saying integer or setting the variable as a := 1. You would substantiate a for and define the steps to perform until - the root of what we would now call a for loop.

1958年にIALという名前で最初に開発された言語はALGOLという名前で普及し、そのALGOLで導入されたある文法が現在forループと呼ばれているもの起源らしい。

因みに当時の文法はこんな感じ。*1

for i := 1(1)100 do

iの初期値が1で1ずつインクリメントされ、iが100(until 100)になるまでループが続くという意味だ。

因みに文法としてはFortranのdoがfor文の起源らしいが、言葉としてのforを導入した理由を説明できなかった。

lwn.net

そこでALGOL58のforループという言葉がどこから導入されたか調べてみた。

そしたらSuperplanという言語を見つけた。1952年5月にPublishされた論文だ(Errorと書かれているがしっかりリンクには飛ぶことができる)。因みにSuperplanの著者Heinz RutishauserはALGOL58の設計会議に参加していた。*2

doi.org

大学のIPからアクセスすることで閲覧できたので上の論文の内容を読んでみた。

Für文が与えられた数式に対しプログラムを"compute"する方法であり著者がそれを考案したという内容だ。

Methods to “compute” the program for a given set of formulae have been worked out by the author

論文内で紹介されている文法でさらにこんなのが、、、

Für k = 2(1)n

ぽいぞ。どうやらプログラミング言語のfor文はドイツ語のfür由来らしい。

大分見えてきた。

大学で入門講座を取ったぐらいのドイツ語力だが、一応fürを調べてみた。

kotobank.jp

そしたら、これ英語のforとほぼ同じ意味だぞ。。。ってなってしまったが、じっくり読んでみるとfürだけにある意味で、

❿ ( (反復・連続;無冠詞の同一語を反復して) ) …ずつ,…ごとに

というものが見つかった。これがforループの意味が成り立つ所以かも知れない。

確かに英語でも

[時間・距離を表わして] …の間(ずっと); (予定期間として)…の間(は) 《★【用法】 この意の for はしばしば 《口語》 では略される》

という意味があったが、ドイツ語のfürよりも反復、連続というニュアンスが弱めである。


これ以上プログラミング言語という形でforという単語の由来を調べられなかったので一旦結論をまとめようと思う。

今ある情報から鑑みるに、Superplanで使われたFür文がプログラミング言語で使われた初のforループである。Für文自体はドイツ語の反復、連続という意味から作られ、またSuperplanを参考にしたAlgol58が英語で似た単語としてforという単語を採用した。そしてそれがそのまま現在までfor文として利用されている。と考えるのが妥当である。


最後まで見て頂けたら幸いである。当たり前に使っているものの時代背景を考察するの楽しい〜。

続く。。。


補足(2021/12/28)

皆様、特にМорожеさん、指摘ありがとうございます。

「~に対して」の für と取るのが妥当であること、"compute for a given set of formulae" だからこそ "Für k = 2(1)n" という風な記法になっていること、異論の余地がありません。

コメントの通りで、for文はfürの翻訳借用から直接由来したと考えるよりは、"compute for a given set of formulae"だったり、"A for loop statement repeats for a certain number of times." だったりの繰り返しの目的、〜に対しての意味としてのforから由来すると考える方が妥当であります。Superplanのfür文が最古のfor-loopを使ってる言語だとしても、繰り返しの目的という意味でのfürであり、辞書に意味が存在することから安直に解釈してしまったこと反省しております。

学ばせて頂きました。ありがとうございます。