Gforthを使用して累乗を実装しようとしています。理論的には、スタックベースの言語がどのように動作するかを理解しています。ただし、Gforth での実装に問題があります。
これが私が今持っているものです:
: myexp
1 swap ?do rot dup * rot rot loop ;
ただし、実行すると、次のようなスタック アンダーフローが表示されます。
3 2 myexp
:1: Stack underflow
3 2 >>>myexp<<<
Backtrace:
$7F645EFD6EF0 rot
$2
$1
Gforth のループ構造は、ループ時にスタックを操作していますか?
私がオンラインで見たほとんどのループの例はかなり複雑で、Forth を初めて使用する人を混乱させるため、Forth がどのように機能するかについてはわかりません。
実装の何が問題になっていますか?