colorforth / mod算法如何工作?

问题描述

我最近一直在看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实现了nip操作。我也了解混合循环以及组合。

这是我不足的地方。

  1. 似乎期望堆栈上有两个项目,分子和分母,这很有意义。但是,首字母for将TOS推入返回堆栈,而在返回堆栈上仅留下一项。 over over操作可以使用两个存在的值,因此我不确定发生了什么。
  2. 他提到了减法,但是除了- 2* -分支(已经提到在1中转移)之外,没有发生反转。
  3. 我不确定如何仅将1s或0s(除数?)内的值来逐步构造商。

一些想法:

  1. 也许这取决于Chuck正在编程的芯片的特定字长以及添加足够次数后的翻转
  2. 也许缺少使该分母剂反转的前导,导致每个循环中都提到了减法。

colorForth和其他Forths之间的某些特质:

  • .是Chuck芯片上用于计时目的的点子。
  • -是按位求逆,而不是减法。
  • or是排他性的,或不是包含性的或

有关其他信息,请参见以下来源: Description of function and use of colorForth opcodes

解决方法

仅供参考:有关此问题的excellent answer由Ulrich Hoffmann发布在comp.lang.forth中。


请编辑此帖子以使其更详细。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...