4

私はGforthを使用しており、定義に単語を作成したいと考えています。Gforth の cmd 行で、次のように入力できます。

create foo
ok

より具体的には、スタック上のサイズを想定し、その配列へのアドレスを持つワードを作成する配列関数を定義しました。

: array ( n -- ) ( i -- addr)
    create cells allot
        does> cells + ;

したがって、入力10 array fooすると、後で使用できますfoo

しかし、10 array foo別の定義内に記述すると、コンパイル エラーが発生します。コンパイルする foo を置き換えてみましs" foo"たが、実行時に次のように爆発します。

長さゼロの文字列を名前として使用しようとしています

これを行う方法はありますか?

4

2 に答える 2

4

gforth でそれを行う 1 つの方法:

: bar   10 s" foo" ['] array execute-parsing ;

他の実装では、たとえばhttp://pfe.sourceforge.net/words/w-header-015.htmlなど、別の方法で行います。

標準の Forth で行うのは簡単ではありませんが、これで十分かもしれません。

: bar   10 s" array foo" evaluate ;
于 2013-10-24T17:51:13.103 に答える
1

あなたがやりたいことのほとんどは、単語を定義することで実行できると思います。つまり、create ... does> ...This を使用すると、特殊な動作を持つ単語を定義できます。例えば:

: 2const create , ,  does> 2@ ;

2 3 2const a-double(2 と 3 を に隠して) のような double 定数を作成し、2 つの値 (2 3)a-doubleをプッシュするために使用できます。a-double

于 2018-07-05T20:14:17.247 に答える