我最近一直在研究Chuck Moore的colorForth,我发现了以下代码片段(以传统语法呈现(:
: /mod for begin over over . + -if drop 2* [ swap ] next ; then over or or - 2* - next ;
以下解释:
Divide operation: trial subtract and shift in either 0 or 1
我真的很困惑这是如何实现全除法运算的。我意识到2*
在0中移动,- 2* -
在1中移动,并且over or or
实现了夹持操作。我也理解混合循环和if组合。
这就是我的不足之处。
- 它似乎期望堆栈上有两个项,分子和分母,这是有道理的。但是,初始
for
将TOS推送到返回堆栈,在返回堆栈上只留下一个项。然而,over over
操作在存在两个值的情况下工作,所以我不确定发生了什么 - 他提到了减法,但除了
- 2* -
分支之外,没有发生反转,它已经被提到在1中移位 - 我不知道你如何通过只在1或0中移动(到除数中?(来一点一点地构造商
一些想法:
- 也许这取决于Chuck编程的芯片的特定字大小以及添加足够次数后的滚动
- 也许缺少了一个反转分母的前导码,导致每个循环中都提到了减法
colorForth和其他Forth之间的一些特质:
.
是Chuck芯片上用于定时目的的nop-
是按位反转,而不是减法or
是互斥的或不是包含的或
有关其他信息,请参阅来源:colorForth操作码的功能和使用说明
仅供参考:Ulrich Hoffmann在comp.lang.forth上发布了这个问题的精彩答案。
请编辑此帖子以使其更加详细。