のように、単にその単語名を書くだけである。他の言語でいうところの関数とかサブルーチンの呼び出しに相当するが、決して、ベルを鳴らす
あるいは、CALL ベルを鳴らす
というような表現にはならない。ベルを鳴らす();
というように、これもきわめて単純な表記となる(分かち書きであることに注目)。画面クリアし 二秒待ち ベルを鳴らす
というプログラムを実行すると、画面または出力先に次のように文字列が表示される。「こんにちは。」を 表示する
上記のプログラムは、BASIC 言語であれば、こんにちは。
また、C 言語であれば、PRINT ”こんにちは。”
といったところであるが、Mind では語順(目的語と動詞の関係)が日本語として正しい順になっていることに注目して欲しい。printf(”こんにちは。”);
もう1つは、一見、語順の問題にしか見えないものが、実はもっと大きな違いを含んでいるという点である。語順、すなわち記述の順番は、違いのほんの一部が見えているにすぎない。
- 注1
- Mind はFORTH というプログラム言語の原理を応用している。FORTH はアメリカ生まれでありながら、文法が日本語に似ている。
このプログラムでは、語順が違うだけでなく、途中に無関係な単語が挿入されている。しかし、これで正しく動作する。また、表現としてもそんなに不自然ではなく、普通の日本語として通用する。「こんにちは。」を 画面クリアしてから 表示する
上記では、何を表示するか(表示すべきデータ)が記述されていない。しかし、これでも日本語としての意味を理解することはできる。そう。これは、「何か」を(画面をクリアしてから)表示することを表しており、これもまたMind の正しいプログラムである。画面クリアしてから 表示する
という記述は、「何か」に2 を掛けるという処理を表しており、Mind の正しいプログラムである。2を 掛ける
この表現で、「2を 掛ける」には、掛けるべき数値が1つ足りないにもかかわらず、そんなに不自然でないと思われるだろう。日本人は、このような表記を見たときに「暗黙のデータ」の存在を推察でき、「何かに2を掛けるのだろう」と解釈するからである。この暗黙のデータの格納場所を「スタック」と呼ぶことにする。二倍とは 2を 掛けることである。
上図で水平に伸びているのがデータを置く台である。左側に垂直になっているのは、この台の隅を示す。この隅の近くに最初のデータを置き、以下、右側に向かってデータを並べていく。データをスタックから取り出す場合には、この逆の順序、つまり、一番右側に置かれているデータから順に取り出すものとする。
まず、最初はスタックが空になっていると仮定する(下図)。全体のプログラム
「こんにちは。」を 表示する
次いで、下の処理が実行されると、
スタックは次のようになる。最初の実行
「こんにちは。」を
文字列が「実行」されるという言い方に妙な感じを受けられるかも知れないが、Mind ではプログラム内に記述されたすべての単語が1つ1つ順番に実行されるというきわめて単純な原理で処理が進んでいく。こんにちは
『表示』という機能は、表示すべきデータをスタックから受け取るように設計されているので、『表示』はスタックから「こんにちは。」という文字列のデータを取り出し、これをコンソールに表示する。次の実行
表示する
ちょうど銀行で、客がいったんカウンターに置いた通帳などを行員が受け取るような動きに似ている。
上のプログラムは3 つの単語から構成されている。「2」「3」「加える」である。全体のプログラム
2に 3を 加える
まず、最初はスタックは空である(下図)。
- 注2
- 対話機能で確かめる場合、第2 行目(「3を」)からのキー入力では、ス タックの自動リセットを避けるため、行の頭に空白を1つ入れること。
- 注3
- Mind Version 7 以降では対話機能が無くなっている。以下は対話機能が有った時の挙動となる。(対話機能の復活は未定)
この状態で、「2に」を実行する。スタックには数値2が積まれる。次のようになる。
次に「3を」を実行する。スタックには、さらに数値3が積まれ、次のようになる。2
最後に「加える」が実行される。「加える」という処理は、加算すべき2つのデータをスタックから取り出す。この瞬間、スタックは空になる。2 3
そして、「加える」は、加算結果(数値5)を再びスタックに返す。最終的にスタックは次のようになる。
最後に得られた数値はどうなるのかというと、このまま放っておけばよい。これに引き続く処理がきっとこのデータを取り出すことになるのだろうが、それはこの一連の処理の関知しないところである。5
BASICの上のプログラムは、 「A」が実行され、「=」が実行され、「2」が実行され …というようにはならない。いったんこのプログラム全体が解釈されてから、最後にまとめて「しかるべき」オブジェクトコードが生成され、あるいは実行されるという間接的な方法によっている。したがって、細かなレベルではプログラム(ソースコード)と動作は一対一ではない。A=2+3
しかし、これはBASIC の文法としては許されない。なぜなら、2+3という計算によって得られた結果をどうするのかが記述されていないからである。2+3
という記述がなぜ許されるのかといえば、計算結果が暗黙のデータ格納場所(すなわちスタック)に格納されるからである。Mind では、あらゆる演算において、計算結果は暗黙のデータ格納場所に格納する…という統一が成されているために、「どこそこへ格納する」というような指示はあえて行う必要がなく、省略するこ とができる。2に 3を 加える
末尾の「る」を外しただけだが、これに後続する何らかの処理を予感させる(注4)。2に 3を 加え
このような事象は何も計算結果だけでなく、入力されるデータにおいても同様である。たとえば、
- 注4
- Mindでは、単語末尾の送り仮名は最終的に無視されるので、「加える」でも「加え」でも処理は同じである。
は、日本語の意味としては「何かに3を加える」ことだが、コンピュータの動作としては、「暗黙のデータ格納場所に置かれているデータに3を加え、暗黙のデータ格納場所に返す」ことに相当する。3を 加え
普通の日本語
バターを塗り
という場合に近いだろう。上記では「何にバターを塗るのか」が省略されているが、大抵の場合にはこれで話は通じるし、少なくとも、日本語の文法として誤りではない。当事者の暗黙の了解となっている対象物(パン)があり、それに塗ることになろう。
と変化しても、依然として対象物(パン)を明示するような記述は現れない。普通の日本語
バターを塗り具を乗せる
というのも同様である。普通の日本語
山田さんから受け取り佐藤さんに渡してくれ
「笑う」などという単語はMind に標準で備わってはいないので、そのままではエラーになるが、文法的に誤りというわけではない。単に未定義な単語が出現したというだけのことである。笑う
とでも定義しさえすれば、先のプログラムは名実ともに正しいプログラムになる。笑うとは 「わっはっは」を 表示することである。
などと入力すれば、コンソールには笑う。
という文字列が表示される。わっはっは
従来のプログラム言語のイメージとはだいぶ違うが、ここまでくると「プログラムというのは本当は何なのか」が見えてくるような気がしないだろうか。Mindのプログラムとして有効
ビールを 飲む
水素と 酸素を反応させる
彼女を 誘って ディスコに 行く