物部自動車工業 店主の日記 普段着の文章

京都市西京区で車検整備の認証工場の店主です.趣味や思いつきを書いています.

特に読んでいただきたい記事
  1. 命は大切ですかと問えば

FORTHについて

forthの特徴としてスタックが挙げられます。
スタックとは一次配列のように順に数値を保管する場所です。ただ、配列と違うのは配列要素の何番に数値を入れると言う考え方ではなく、例えば、座布団を上に積み重ねるように、数値を積み重ねていく、そう考えていただくとわかりやすいかと思います。

例えば 5 と入力しリターンキーを押しますと、一番上のスタックに5が格納されます。
次に 10 と入力しますと、新たに 10 がスタックの一番上に格納され、先ほどの 5 は、上から二番目のスタックに自動的に移されます。

スタックと言う領域の先頭に 10 が入り、2番目に 5 が格納されています。
この状態で + という演算子を入力しますと 15 という数値が先頭のスタックに積まれ、10 と 5 は削除されます。
つまり、+ という演算子は 先頭のスタックと2番目のスタックの数字を加算し、先頭のスタックにその結果を残すと言う意味となります。

このスタック操作が、頭の中で自在に出来るようになりますと、forthがわかり始めます。

先の記事でありました dupやswapやrotは、このスタックを操作するためのワードです。

他の言語の多くは数値を変数に格納します。forthも変数を使うことが出来ますが、どうしてもというときにしか使わないのではと思います。
スタックを使うのがforthらしいプログラムであるという認識があるのと、スタックに慣れてしまうと、これが案外、便利で変数に代入しようと言う考えがなくなってしまうのかもしれません。

先ほど、書きましたワードとは、いわゆる、コマンドですとか、関数、数値の総称です。
forthでは、上記のものをひっくるめてワードと読んでいます。
forthのプログラミングとは、新しいワードを作ることと同意でして、よくある言語の入門書の最初のプログラム。

int main()
{
printf("hello, world\n");
return 0;
}

いま、私が勉強し始めたC言語ではこのように記述しますが、forthなら、

: hello ." hello, world cr ;

と書きます。