Factor?連鎖性?知らない子ですね... (2. 基本構文とword)
実は2学期期末まであと1週間である。Factor書きたい欲は抑えられません。
今日も学校から帰ったら書こうと思ってたけど、無意識的に科学技術のレポートやら何やら始めてしまって結局こんな時間である。
まだ終わってなかったのかと言われればそれまでなんですがね。
今回はFactorにおける基本構文とその主要であるwordについてのお話をしていこうと思います。
例えばこんな感じのコードがあったとしましょう。(IN: scratchpad) 5 sq dup + .
50
Factorの構文は非常にシンプルで簡潔で、プログラムはwordとリテラルで構成されます。このコードの中でwordは sq dup + . の4つ、リテラルは 5 の一つです。リテラルについては次回説明する予定なので今回は省略。
ここで注目したいのはwordである sq dup + . の4つについて
これらの4つはFactorにおいてwordとして定義されています。
C言語における関数のようなものだと思ってもらえればいいでしょう。
まず dup について見ていくとこのような記述があるでしょう。
Factorのwordでは、全てにスタック効果宣言が与えられています。: dup ( x -- x x )
dupワードでいうと ( x -- x x ) の部分です。 dupワードではリテラル入力を1つ取り、そのリテラルを2つスタックに積む、すなわちスタックの1番先頭をコピーするという意味です。
dupワードはスタックの1番先頭をコピーし、もう1つ先頭に積むワードです。
次に sq について
sqワードには先ほど説明したdupワードが使用されています。: sq ( x -- y ) dup * ;
そのことを頭に入れて考えていくと
スタックの先頭がコピーされ、その2つの積が新たにスタックに積まれていることがわかるでしょう。
すなわちsqワードはスタックの先頭を2乗して新たに積むワードです。
Factorではほかにもたくさんのwordが用意されています。今後、他のwordについて説明する機会があると思いますが、興味があれば自分で調べてみるのもいいです。
何よりFactorは言語仕様文章が充実しており、wordもとてもわかりやすくまとめられています。(英語ですが)
それでは貴方のFactorライフを充実したものにしてくださいね。