0

スタック上のすべてのアイテムをドロップする Forth ワードを書き込もうとしています。「ドロップ」で無限ループを実行し、スタックが空であるために「ドロップ」が失敗したときにエラーをキャッチするという、かなりばかげた方法を使用しています。

私の言葉は次のように定義されています。

( Infinite drop loop)
: droploop begin drop true while drop repeat ;

( Experimental catch with a single drop)
: dropcatcher ['] drop catch drop ;

( Like dropcatcher, but with 'droploop' instead of 'drop')
: dropall  ['] droploop catch drop ;

droploop を実行すると、予想どおりのエラーが発生し、実行後にスタックが空になります。dropcatcher を実行すると、スタックが空でない場合はドロップし、スタックが空の場合は何も報告しません。dropall を実行すると、あらゆる種類のものがスタックに残ります。

次のようになります。

2 3 4 5 6 7 8 9 10 dropall .s <9> -1 3 -1 5 -1 7 -1 9 -1 OK

droploop と dropcatcher はそれ自体で正しく動作しているように見えるため、dropall は問題なくスタックを単純にクリアすると思いますが、残念ながら、dropall が動作しない理由がわかりません。

dropall の動作が droploop や dropcatcher と異なるように見えるのはなぜですか? または、私はここで間違っていますか?

4

1 に答える 1