最近在comp.lang.forth上发现了一些代码,是 Coos Haak 写的,我很难理解。
它应该对括号之间的数字求和或相乘。例如,
( 1 2 3 +) ok
. 6 ok
为方便起见,我将在此处复制它:
: (
depth 1+ r> 2>r
;
: cond
depth j >
;
: done
2r> rdrop 2>r
;
: +)
begin cond
while +
repeat
done
;
: *)
begin cond
while *
repeat
done
;
我看到短语r> 2>r
和2r> rdrop 2>r
。但是,我对他们在做什么感到很困惑。我猜想开括号处的堆栈深度以某种方式隐藏在返回堆栈中。但是,我不明白。
这些对返回堆栈有什么作用?
在 Gforth 文档中,我看到:
r> R:w – w core “r-from”
2>r d – R:d core-ext “two-to-r”
2r> R:d – d core-ext “two-r-from”
rdrop R:w – gforth “rdrop”
w Cell, can contain an integer or an address
d double sized signed integer
这是否与 w 和 d 之间的转换有关?