如何使整个浮动堆栈可见?
How can I make the entire float stack visible?
Forth 编程语言使用堆栈在函数之间传递参数。不是给子函数一个数字作为直接信息,而是首先将值放入数据堆栈,然后另一个函数从堆栈中获取值。
Forth 的一个特殊功能是处理不同堆栈上的整数值和浮点值。这意味着,不可能将浮点值推送到数据堆栈。在用 Forth 编写小程序时,经常需要调试代码行。
这可以通过打印出堆栈的内容来实现。如果开发人员看到堆栈中现在有什么,he/she 就很容易理解代码的问题所在。打印出堆栈的内容对于错误跟踪很重要。
将两个数字推送到普通数据栈后,可以显示其内容。在示例中,输入“.s”命令后,两个整数都被打印出来。但是,如果我将两个浮点数推送到专用浮点堆栈,则只会显示最后一个元素。如何使整个浮动堆栈可见?
gforth example.fs
1 2 .s cr \ <2> 1 2
1.0e 2.0e f. cr \ 2.
bye
Gforth 有 f.s
字,可以满足您的需求。
参见 Gforth 手册的"Examining" section:
一种可能的便携式解决方案(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 编程语言使用堆栈在函数之间传递参数。不是给子函数一个数字作为直接信息,而是首先将值放入数据堆栈,然后另一个函数从堆栈中获取值。
Forth 的一个特殊功能是处理不同堆栈上的整数值和浮点值。这意味着,不可能将浮点值推送到数据堆栈。在用 Forth 编写小程序时,经常需要调试代码行。
这可以通过打印出堆栈的内容来实现。如果开发人员看到堆栈中现在有什么,he/she 就很容易理解代码的问题所在。打印出堆栈的内容对于错误跟踪很重要。
将两个数字推送到普通数据栈后,可以显示其内容。在示例中,输入“.s”命令后,两个整数都被打印出来。但是,如果我将两个浮点数推送到专用浮点堆栈,则只会显示最后一个元素。如何使整个浮动堆栈可见?
gforth example.fs
1 2 .s cr \ <2> 1 2
1.0e 2.0e f. cr \ 2.
bye
Gforth 有 f.s
字,可以满足您的需求。
参见 Gforth 手册的"Examining" section:
一种可能的便携式解决方案(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.
;