Недавно, на comp.lang.forth Я нашел код, любезно написанный Coos Haak, с которым я с трудом понимаю.Как работают 2> r и 2r> работают?
Предполагается суммировать или умножать цифры между скобками. Например,
(1 2 3 +) ok
. 6 ok
Для удобства, я буду воспроизводить его здесь:
: (
depth 1+ r> 2>r
;
: cond
depth j >
;
: done
2r> rdrop 2>r
;
: +)
begin cond
while +
repeat
done
;
: *)
begin cond
while *
repeat
done
;
Я вижу фразы r> 2>r
и 2r> rdrop 2>r
. Но я довольно смущен тем, что они делают. Я предполагаю, что глубина стека в открытой скобке каким-то образом скрывается в стеке возврата. Но я этого не понимаю.
Что они делают с возвратным стеклом?
В документации Gforth я вижу:
r> R:w – w core “r-from”
2>r d – R:d core-ext “two-to-r”
2r> R:d – d core-ext “two-r-from”
rdrop R:w – gforth “rdrop”
w Cell, can contain an integer or an address
d double sized signed integer
ли это что-то делать с переходом между ш и д?
Итак, я полагаю, что в документах gforth тип данных «d» представлен двумя элементами данных, а «w» - только одним. Я рад, что теперь имею ссылку на 200x. – beeflobill