1

Java中,可以执行以下操作:

int var = 5;
var += 2;
var -= 2;
var *= 2;
var /= 2;

可以在 Forth 中执行此操作吗?

variable var
3 var !
1 var +! //Increment

是否可以在 Forth 中进行类似的其他操作?如果没有,关于如何做的任何提示?

4

2 回答 2

3

除了用 递减之外-2 var +!,其他操作都不是内置的。

你可以这样做:

: -! ( x addr -- )   swap negate swap +! ;
: *! ( x addr -- )   tuck @ * swap ! ;
: /! ( n addr -- )   tuck @ / swap ! ;
于 2018-03-01T08:19:59.887 回答
0

在 Forth 中无法做到这一点有一个根本原因。让我们

整数变量,变量 1;

和 Jave 代码:

'var = var1;

除了 Forth 想要用空格分隔的标记之外,Forth 想要一个词总是做同样的事情,与上下文无关。在 Java 代码中, var是左侧,这意味着它必须代表一个地址,其中存储了一些东西。右边的var1也代表一个地址。但是 Java 神奇地获取了地址的内容!在 Forth,我们不处理魔法。我们不能让var现在做这个然后做那个。只要您远离魔术部分,您提供的示例是可行的,正如其他答案中所解释的那样。

[当然 Forth 也可以变魔术。您可以创建一个 =-word 来检查以下单词 var 是否为 int 类型,然后获取它。但那不是 Forth,那是 Java 的 Forth 实现。]

于 2019-01-18T16:20:00.777 回答