Forth の Vocabularies
AndroidKotlin
2022-9-24 22:56 JST

gforth の vocabularies について実験した。forth-2012 には標準で入っている機能みたい。

order

order を実行すると、その word が入った複数の word list(辞書のことね)を表示する。この順で word をサーチするよと。gforth のマニュアルは辞書という言葉は使ってないのでword list という言葉を使う。

order Forth Forth Root     Forth  ok

この例では Forth, Forth, Root の順にword listを参照していく。どういうわけか Forth が重複している。Forth は gforth のword list。登録対象のword listは ok の手前のに表示されている Forth というword list。

結果は get-orderでも得られる(スタックに)。トップに近いほうが優先される。これを使うと簡単な namespace 的な(でもないか)ことを出来たりする。

vocabulary

vocabularyという word で 新たなword listを作ることが出来る。これだけだと作っただけなので何も出来ない。生成した vocabulary 名称を実行すると order のトップを"書き換える"。おそらくこれが order で重複している理由。

vocabulary <sinby>  ok
order Forth Forth Root     Forth  ok
<sinby>  ok
order <sinby> Forth Root     Forth  ok

これだけだと”空”のword listを追加しただけなので、definitions でorder のトップの word list と置き換える。

definitions  ok
order <sinby> Forth Root     <sinby>  ok

これで、以後 <sinby> に word が登録される。切り離したいときはForth という word で可能。

: my-test 1234 . ;  ok
my-test 1234  ok
Forth  ok
order Forth Forth Root     <sinby>  ok
my-test
:11: Undefined word
>>>my-test<<<
Backtrace:
$7FB840347A68 throw
$7FB84035DDD0 no.extensions
$7FB840347D28 interpreter-notfound1
: my-my-test 5678 . ;  ok
my-my-test
:13: Undefined word
>>>my-my-test<<<
Backtrace:
$7FB840347A68 throw
$7FB84035DDD0 no.extensions
$7FB840347D28 interpreter-notfound1
definitions  ok
: my-my-my-test 9012 . ;  ok
my-my-my-test 9012  ok

リンク集