スタック上のすべてのアイテムをドロップする 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 と異なるように見えるのはなぜですか? または、私はここで間違っていますか?