В Java можно сделать следующее:
int var = 5;
var += 2;
var -= 2;
var *= 2;
var /= 2;
Можно ли это сделать в Форте?
variable var
3 var !
1 var +! //Increment
Можно ли сделать другие подобные операции в Форте? Если нет, подскажите как?
В Java можно сделать следующее:
int var = 5;
var += 2;
var -= 2;
var *= 2;
var /= 2;
Можно ли это сделать в Форте?
variable var
3 var !
1 var +! //Increment
Можно ли сделать другие подобные операции в Форте? Если нет, подскажите как?
За исключением уменьшения с помощью -2 var +!
, эти другие операции не встроены.
Ты можешь это сделать:
: -! ( x addr -- ) swap negate swap +! ;
: *! ( x addr -- ) tuck @ * swap ! ;
: /! ( n addr -- ) tuck @ / swap ! ;
Есть фундаментальная причина, по которой это невозможно сделать в Forth. Давайте
интервал переменная, переменная1 ;
и код Jave:
'переменная = переменная1;
Помимо того, что Forth хочет, чтобы лексемы были разделены пробелами, Forth хочет, чтобы слово всегда делало одно и то же, независимо от контекста. В коде Java var — это левая часть, а это значит, что она должна представлять адрес, где что-то хранится. Справа var1 также представляет собой адрес. Но Java волшебным образом извлекает содержимое адреса! В Форте мы не занимаемся магией. Мы не можем допустить, чтобы var сначала делал то, а потом то. Примеры, которые вы приводите, выполнимы, если вы держитесь подальше от магических частей, как объясняется в других ответах.
[И, конечно же, Форт тоже может творить чудеса. Вы можете создать =-word, который проверяет, является ли следующее слово var типом int, а затем извлекает его. Но это не Forth, это Forth-реализация Java.]