Thu, 03 Apr 2008

初めてのFORTH その4

文字列操作の続き

アドレス操作

「char+」はアドレスを+1するWORDで、じゃあ+2とか+3したい時は?っていうと

2 chars +

とかします。なので文字列oneのアドレスを+1する時と、+2する時はそれぞれ

> create one 7 chars allot  \\ 文字列oneを定義
> s" Hello!" one place      \\ 文字列oneに"Hello!"を代入
> one .
one . 2133906496  ok
> one char+ .
one char+ . 2133906497  ok
> one 2 chars + .
one 2 chars + . 2133906498  ok

となります。


Continue Reading...: "初めてのFORTH その4"



Wed, 02 Apr 2008

初めてのFORTH その3

文字列の続き

count

前の文字列の説明で、count WORDは「変数のアドレス」と「文字列長」をスタックに詰む って書いたけど実は違ってた。正しくは「変数のアドレス+1」と「文字列長」をスタック に詰むんだった。


Continue Reading...: "初めてのFORTH その3"



Tue, 01 Apr 2008

初めてのFORTH その2

配列

例えば変数arrayに10個分の要素を持つ配列を作成

> create array 10 cells allot

要素はcellというらしくて、10個のcellを割り当てる(allot)という意味らしい。

配列に値を代入。例えば2番目の要素に値20を代入。

> 20 array 2 cells + !

array自体はアドレスを示すので、「array 2 cells +」っていうのは arrayの示すアドレスからcell2つ分先のアドレスを示すんじゃないかな、と理解した。

C言語でいうところの

char array[10];
*(array+2) = 20;

ってのと同じかと。


Continue Reading...: "初めてのFORTH その2"



FORTHやらJoyやらCatやらFactorやら

FORTHは、配列やら文字列やらサイズを指定してcreateしないといけないんだね。 しかも文字列をコピーする際にはコピー先にもサイズを指定してアドレスを 用意しておかないといけない。

あ、そうなのかFORTHは動的に領域確保はしてくれないのかー それならわざわざFORTHでやらんでも、Cでやるからいいやっとちょっと萎えたんだけど、 乗りかかった船なのでもう少し勉強してみるか。

とはいうもののFORTHと同じく逆ポーランド記法でスタック型なJoy/Cat/Factorの方が色 々使えそうなので実行環境を入れようとしてみた。

  • Joy

    • FORTHにlispの要素が色々追加されてて楽しそう。
    • 2005年くらいで開発止ってそう
    • ビルドできた。
    • あれgcは?
    • あれcygwin shellで動かしてるとすぐにCrashしちゃうぞ。。?
  • Factor

    • 今風なライブラリが一杯ありそう
    • Manualは見難い。一覧表示できるのが欲しい。
    • 意外とファイル多い
    • gitでcloneしたらなぜか途中で止まっちゃった
    • 0.9.1のソースを取ってきてWinXP上のcygwinでビルドして、boot.windows.x86.32と一緒に起動したんだけどなぜか動かず
    • 0.9.1のWindows用バイナリを取得、cygwin shell上で動かした・・・?どうだっけ?
  • Cat

    • ソースを取得
    • あーーーC#かーーービルドできねーー
    • バイナリ取得
    • Pythonでインタプリタ作ってる人がいた。。うーんまだまだ機能が足らない。consも対応してないし

なんか色々やってたら、どれが動いてどれが動かんかったかわからんくなってきた。 また今度もうちょっと落ち着いて試してみよう。


Fri, 28 Mar 2008

初めてのFORTH

ふとFORTHを触ってみたくなった。自分の勉強したことの覚え書き。

逆ポーランド記法でスタック型ってなんか格好良いよねっと思って。 確かFORTHって、2006年のLLRingで紹介あったよね。

はじめに

インストールした処理系は、Gforth v0.6.2。

コマンドラインから

$ gforth

とすると対話環境が開始される。


Continue Reading...: "初めてのFORTH"