Арифметические операции с четвертым выражением

В Java можно сделать следующее:

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

Можно ли это сделать в Форте?

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

Можно ли сделать другие подобные операции в Форте? Если нет, подскажите как?


person bob9123    schedule 01.03.2018    source источник


Ответы (2)


За исключением уменьшения с помощью -2 var +!, эти другие операции не встроены.

Ты можешь это сделать:

: -! ( x addr -- )   swap negate swap +! ;
: *! ( x addr -- )   tuck @ * swap ! ;
: /! ( n addr -- )   tuck @ / swap ! ;
person Lars Brinkhoff    schedule 01.03.2018

Есть фундаментальная причина, по которой это невозможно сделать в Forth. Давайте

интервал переменная, переменная1 ;

и код Jave:

'переменная = переменная1;

Помимо того, что Forth хочет, чтобы лексемы были разделены пробелами, Forth хочет, чтобы слово всегда делало одно и то же, независимо от контекста. В коде Java var — это левая часть, а это значит, что она должна представлять адрес, где что-то хранится. Справа var1 также представляет собой адрес. Но Java волшебным образом извлекает содержимое адреса! В Форте мы не занимаемся магией. Мы не можем допустить, чтобы var сначала делал то, а потом то. Примеры, которые вы приводите, выполнимы, если вы держитесь подальше от магических частей, как объясняется в других ответах.

[И, конечно же, Форт тоже может творить чудеса. Вы можете создать =-word, который проверяет, является ли следующее слово var типом int, а затем извлекает его. Но это не Forth, это Forth-реализация Java.]

person Albert van der Horst    schedule 18.01.2019