forth - 在Forth中实现求幂

标签 forth gforth

我正在使用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的人感到困惑。

我的实现有什么问题?

最佳答案

  • 1 swap错误。 ?do希望下限位于顶部
    堆栈。
  • loop主体错误。这两个界限已从数据堆栈中删除,因此您无法使用rot访问幂基。

  • : myexp ( u1 u2 -- u3 ) \ u3 = u1^u2
       over swap 1 ?do over * loop nip ;
    

    关于forth - 在Forth中实现求幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21130697/

    相关文章:

    memory - 第四:将名称与内存地址关联起来

    shebang - Unix shebang 与 Gforth

    opengl - 如何使用 OpenGL 在 Forth 中画一条线?

    assembly - 使用 x86 程序集的 Forth 中的平方根函数?

    forth - 如何在 Forth 中对参数进行排序

    networking - 如何从 Gforth 网站读取原始代码?

    forth - 如何实现向量或动态数组?

    forth - 为什么 Forth 为每个变量保留两个单元格?

    bit-shift - 第四为什么负 LSHIFT 会这样表现?

    Forth 局部变量赋值变量