初心者が書くForthメモ

『Let Over Lambda』ダグ・ホイトを読んでいたらForthという言語があると知った
とりあえず『FORTH入門』レオ・ブロディー著がやってきたので触ってみることに…

Gforth 0.7.0, Copyright (C) 1995-2008 Free Software Foundation, Inc.
Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license'
Type `bye' to exit

(環境: MacPortsでgforthを入れて実行)

: star 42 emit ;(Enter Key) ok
star(Enter Key) * ok

:(コロン)は定義を表すらしい
;(カンマ)や:(コロン)は、1つの言葉なので単語のように扱う(=Spaceいれる)
CR(=改行)を記入しないと改行されずに"ok"と表示される
上の例だと、2行目は上で定義したstarを実行したことになる
= starで定義された42 emit (*を印字すること)が実行された
lisp同様、大文字と小文字の違いはないらしい
計算方法は、逆ポーランド記法(後置記法)というやつで
HP(ヒューレット・パッカード)の電卓に採用されているものと同じものっぽい
(HPの電卓は日本では並行輸入品か個人輸入でのみ入手可能だったはず)

3 4 + .(Enter Key) 7 ok
3 4 + (Enter Key) ok

となる。.(ドット)がないと結果が表示されない。ちなみに、

1 2 3 4 + .(Enter Key) 7 ok
1 2 3 4 + . . .(Enter Key) 7 2 1 ok
1 2 3 4 + + + .(Enter Key) 10 ok
1 2 + 3 4 + + .(Enter Key) 10 ok

となった。演算子の+は2つ前と1つ前しか作用しないのかな。
どうやら、lisp (+ 1 2 3 4) => 10のようにはいかないらしい。
ここでも.(ドット)は一語であるらしいのでSpaceに注意
.(ドット)は後ろから順に結果を表示するもの
出力結果以上の.(ドット)を表示すると過去の結果(蓄積されたもの)が呼び出されるようだ
過去の結果がない場合だと、

:18: Address alignment exception
>>>.<<<
Backtrace:
$3029AC dup
$303650 s>d

こんなかんじのエラーがでてきた。18はラインの数で$~はメモリの場所かな
(一段下がったりすることはないようなので気にせず訂正すればよいらしい)

22 4 / .(Enter Key) 5 ok
22 4 /mod . .(Enter Key) 5 2 ok
10.00 2.25 + .(Enter Key) 225 ok

割算は整数のみでしか表示されず、小数点の混じる計算が正しく計算できないとか色々あるらしい
(/MODだと商と余が表示される)
とりあえず、2章まで読んだ感じはこんなところ
結論: lispは前置記法(ポーランド記法)、forthは後置記法、普段は中置記法


洋書のタイトルは、Starting FORTHで同著者のThinking FORTHの翻訳プロジェクトが活動開始しているらしい