このところ条件分岐のことを考えていましたが、条件が記述されること、選ぶ人がいること、分岐すること、この3つはそれぞれ独立していると言ってよいのかもしれません。このそれぞれについて、または幾つかを組み合わせた様子のなかに対話的な出来事を探してみたいと思います。
はじめに「分岐」について。なんらかの条件で動作の分岐する機械について考えてみると、ししおどしはこうした機械だと言えるでしょう。竹筒の先に水が注ぎこまれ、もしも水が一定量たまったならば、水を放出して音を鳴らします*1。ほかに良い例は思いつかなかったのですが、遅くとも14世紀にはこうした仕組みがみられたので*2、条件に基づいた動作をする機械はそこそこ古くから日常の暮らしのなかにあったと思われます。
では、ししおどしに対話はあるでしょうか。ある・・気がします。流れる水と竹筒の間には対話があるように思われます。これは、英語で言い直すならばインタラクションということになるでしょう。
プログラム内蔵方式の(つまり現代のほとんどの)デジタルコンピュータは必ず処理の途中で条件分岐できる仕組みを備えています。コンピュータは命令を与えられた順に処理して、分岐命令にたどり着くと条件を満たしていれば次に実行する命令を変化させます。ここに対話はあるでしょうか?ししおどしにあるのならばあるといって良いかもしれません。コンピュータは流れてくるプログラムと対話をしています。ただし面白いことにこのプログラムはコンピュータに内蔵されていますので、コンピュータは自分が自分と対話しているような形を取ることになります。
ここまでの話に人間は登場しません。機械はただ与えられた条件に従って、水や処理すべき次の命令の尽きない限り動き続けます。
人間にとっての条件分岐は日常の意思決定としてまず登場します。左の道が工事中であれば右の道を通る、といった。ですけどここでコンピュータプログラムに繋がる話題としては、分岐が形式的な表現で書かれていて、人間がそれを読み取って選ぶ必要がある、という場面を想定したいと思います。本件で繰り返し採り上げているのはバロック音楽の時代で、遅くともこの頃には楽譜上にあるダ・カーポとフィーネのような標準的な記法に沿ってプレイヤーが演奏していたとされています。加えていうと、奏者は反復記号と出会ったときに何度くりかえすのかを任意に選んでいたようです*3。
反復記号は条件分岐を含意しています。プレイヤーはいま何度目の繰り返しであるのかを意識する必要があり、「もしも」規定の回数に達していれば、繰り返しを止めることを検討する必要があるためです。ここでは、プレイヤーと楽譜との対話を見ることができると思います。
これと近い場面では、条件分岐を含意しない反復も見られるので触れておきます。シリンダー型オルゴールもディスク型オルゴールも、終わりのない円周状の楽譜を備えています。また、最初の電気機械式自動計算機であるHarvard Mark I(1944年)では穿孔された紙テープがプログラムであり、紙テープの両端を接着して輪にすることで繰り返し処理を実行することができました。そして、Harvard Mark I は条件分岐の機構を持っていません*4。
19世紀におけるチャールズ・バベッジの解析機関では、反復機構を持つことが構想されていました。ルイジ・メナブレアの解説によると、例えばある方程式を解く際に、乗算が4回連続して必要とされます。解析機関では1つの演算操作は1つのOperationカードで実装されますので、これは同じ乗算カードを4回繰り返し用いることで実現されます*5。続いて、いわゆるカウンタ変数nを導入して、nが0の値になるまで繰り返す手法も述べられています。つまり、反復機構を実現するために条件分岐が必須となることは、解析機関の時点で既に検討されていたと言えます*6。また、1枚のカードでなく複数のカードシークエンスの反復利用については、エイダ・ラブレスが主にNote C, Note Fで言及しています。それはカード送りの回転運動においては、巻き戻しによって実現されます*7。
バベッジの構想はのちのコンピュータ開発においてほとんど参照されなかったことが知られています。先のHarvard Mark Iを開発したハワード・エイケンはバベッジの自伝に背中を押されましたが、設計と技術の観点ではほとんど影響を受けておらず、とくに分岐機構を備えていない点ではメナブレアとエイダの記述もよく読んでなかったのでは、と考えられます*8。
1945年のこと、フォン・ノイマンはプログラム内蔵方式のデジタルコンピュータの命令セットが条件分岐を備えているというアイデアと仕組みを草稿で示しました*9。この草稿のコピーはコンピュータ開発者の間で広く共有されました。
1947年のレポートでは、ノイマンは反復処理が条件分岐を含意していることをフローダイアグラム(流れ図)を用いて解説しました。まず彼らは、帰納法、逐次近似法、合計の計算など、さまざまな数学的な問題を解く際には反復作業が現れることを述べました。ここまではバベッジの話にも似ていますが、ノイマンはコンピュータでそれを処理する場合の流れを図解しました*10。ここで反復から抜け出すための条件分岐を担当するノードとしてAlternative Boxが明記されました。このフローチャートの元祖を用いて、ノイマンはプログラム内蔵方式のデジタルコンピュータの命令セットには分岐命令が必須であることを紹介しました。
分岐命令によって自己との対話を繰り返していたコンピュータと、人間との対話が始まったのはいつだったでしょう。教科書的にはTSSの登場からであって、その背景としては例えばジョン・マッカーシーの1959年の所感としてあったように、コンピュータの利用は混みあっており、まずコンピュータオペレータにプログラムを渡して、順番待ちのため結果が返ってくるまでに3時間から36時間くらいかかってました。手紙のやりとりを対話と呼べるならばこれも対話かもしれませんが、TSSによって瞬間的な応答が得られるようになると、速度面における対話感は飛躍的に高まりました。それに伴って、じっさいコンピュータ側から人間に対して質問を表示し、その場で人間が答えを入力するという様式も生まれました*11。
この「対話」らしさについて私が今日知ったこととして、どうもその36時間待たされるようになるまでには過渡的な時期もあったようでして。1957年に世界初の高級言語FORTRANがIBM 704で動作するようになりました。このFORTRANの条件文では、704の操作盤にあるスイッチi番がUp状態かDown状態かを判定して、n1またはn2という別の結果を返すこともできました。 *12
IF (SENSE SWITCH i) n1 n2
つまりこのIF文と、プログラムを一時停止させるPAUSE文と合わせて使えば、いったん特定の箇所でプログラムを止めて、途中までの処理結果を人間が確認して(これはランプで表示させることもできました)、必要に応じてスイッチを切り替えることで分岐先を変更してからプログラムを再開する、という作業が可能となっていました。当時はまだプログラマ本人がオペレータも兼ねていたため、プログラマはこうやって直接コンピュータと対話することも可能だったのでした。
以上では、条件が記述されること、選ぶ人がいること、分岐すること、の3つについて見てきました。とくに条件の記述についてはまだ話したいことがあります。たとえばそれは、選択肢の記述というのはいつ生まれたのかということ、そしてブール代数のことです。
*1:くきゅくきゅ
*2:日本国語大辞典「添水」(そうず)
*3:橋本 英二「バロックから初期古典派までの音楽の奏法―当時の演奏習慣を知り、正しい解釈をするために」。本書、実家に置いてきたので具体的に本書が取り上げているバロックの時期が17世紀から18世紀のどこを指すか、いまは正しく言えないでいます。
*4:Martin Campbell-Kellyら「コンピューティング史: 人間は情報をいかに取り扱ってきたか」
*5:“Sketch of the Analytical Engine” by L. F. Menabrea, translated and with extensive commentary by Ada Augusta, Countess of Lovelace. https://www.fourmilab.ch/babbage/sketch.html "In the preceding table it will be remarked that the column for operations indicates four successive multiplications, two subtractions, and one division. Therefore, if desired, we need only use three operation-cards; to manage which, it is sufficient to introduce into the machine an apparatus which shall, after the first multiplication, for instance, retain the card which relates to this operation, and not allow it to advance so as to be replaced by another one, until after this same operation shall have been four times repeated. "
*6:同書:"But when n is given for the particular case to be calculated, it will be further requisite that the machine limit the number of its multiplications according to the given values."..
*7:同書:"Those who understand the mechanism of this loom will perceive that the above improvement is easily effected in practice, by causing the prism over which the train of pattern-cards is suspended to revolve backwards instead of forwards, at pleasure, under the requisite circumstances; until, by so doing, any particular card, or set of cards, that has done duty once, and passed on in the ordinary regular succession, is brought back to the position it occupied just before it was used the preceding time. The prism then resumes its forward rotation, and thus brings the card or set of cards in question into play a second time. This process may obviously be repeated any number of times."
*8:このようにエイケンがバベッジから受けた影響が限定的である、という話は前記「コンピューティング史」より。
*9:John von Neuman, "First Draft of a Report on the EDVAC".
中央演算部(CA: Central Arithmetical part)の解説が11章にあり、とくに11.3節では条件分岐のための操作sが紹介されています。CAでは、IcaとJcaに格納された値に対する演算結果がOcaに格納されます。操作sでは、IcaとJcaにそれぞれ新たな値を格納したのち、このOcaに格納された値に基づいてIcaかJcaの「どちらか」を新たにOcaへ格納します。
*10:Goldstine and Neumann, "Planning and Coding of Problems for an Electronic Computing Instrument" https://www.ias.edu/sites/default/files/library/pdfs/ecp/planningcodingof0103inst.pdf ページ4のFirst: 以降、FIGURE 7.1や7.2を参照。
*11:対話についてのアンカー (3) - 疏水分線 (hatenablog.com)
*12:高橋 延匡「OSと命令セットアーキテクチャ」 http://id.nii.ac.jp/1001/00005138/
IBM 704用FORTRANマニュアル(マニュアルは1956年に執筆) https://archive.computerhistory.org/resources/text/Fortran/102649787.05.01.acc.pdf