我正在嘗試編寫一個Forth單詞,它將刪除堆棧中的所有項目。我正在使用一個非常笨的方法,通過運行帶有'drop'的無限循環並在'drop'失敗時捕獲錯誤,因爲堆棧是空的。捕捉循環中的異常
我的話被定義爲這樣的:
(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 -1 5 7 9 -1 -1 OK
我希望dropall能簡單地清除堆棧而不用投訴,因爲droploop和dropcatcher似乎可以自行工作,但是,唉,我不明白爲什麼dropall不工作。
爲什麼dropall似乎比droploop和dropcatcher的工作方式不同?或者,我在這裏做錯了什麼?