【问题标题】:How can I make the entire float stack visible?如何使整个浮动堆栈可见?
【发布时间】:2018-12-26 10:50:14
【问题描述】:

Forth 编程语言使用堆栈在函数之间传递参数。不是给子函数一个数字作为直接信息,而是首先将值放入数据堆栈,然后另一个函数从堆栈中获取值。

Forth 的一个特殊功能是处理不同堆栈上的整数值和浮点值。这意味着,不可能将浮点值推送到数据堆栈。在 Forth 编写短程序时,经常需要调试代码行。

这可以通过打印堆栈的内容来实现。如果开发人员看到现在堆栈上有什么,他/她很容易理解代码有什么问题。打印出堆栈的内容对于错误跟踪很重要。

将两个数字推送到普通数据堆栈后,可以显示其内容。在示例中,输入“.s”命令后会打印出两个整数。但是,如果我将两个浮点数推送到专用浮点堆栈,则只显示最后一个元素。如何使整个浮动堆栈可见?

gforth example.fs
1 2 .s cr        \ <2> 1 2
1.0e 2.0e f. cr  \ 2.
bye

【问题讨论】:

  • .f. 从各自的堆栈中弹出顶部值(整数、浮点数)。 .sf.s 显示整个各自的堆栈,而不会弹出值。

标签: stack forth


【解决方案1】:

Gforth 有 f.s 字样,完全符合您的需要。

参见 Gforth 手册的"Examining" section

【讨论】:

    【解决方案2】:

    一种可能的便携式解决方案(Forth-2012 计划)

    \ print floating-point stack content
    : .f ( F: i*r -- i*r )
      fdepth 0= if exit then
      here df! 1 dfloats allot
      recurse -1 dfloats allot
      here df@ fdup f.
    ;
    

    【讨论】:

    • 它看起来很复杂,但这是一个可移植的解决方案,适用于您的 Forth 没有等效于浮点堆栈的 .S 的情况。
    猜你喜欢
    • 1970-01-01
    • 2011-03-10
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    相关资源
    最近更新 更多