Hofstadter мужской-женский последовательности в Форт
Я пытаюсь написать последовательность Hofstadter в Forth, без использования рекурсии. Я чувствую, что я очень близко, но я продолжаю получать ошибку, которая говорит мне,
Ошибка типа: x[m[w]] не является функцией
когда я запускаю его с 10 MALE
, Как я могу исправить эту ошибку?
Мой код выглядит следующим образом:
VARIABLE SIZE
VARIABLE MALE-ARR
VARIABLE FEMALE-ARR
: MALE
DUP SIZE !
CREATE MALE-ARR SIZE @ CELLS ALLOT \ CREATE MALE ARRAY OF LENGTH N
CREATE FEMALE-ARR SIZE @ CELLS ALLOT \ CREATE FEMALE ARRAY OF LENGTH N
0 MALE-ARR ! \ MALE-ARR(0) = 0
1 FEMALE-ARR ! \ FEMALE-ARR(0) = 1
SIZE @ 1 DO
i FEMALE-ARR MALE-ARR i 1- CELLS + @ CELLS + @ - MALE-ARR i CELLS + !
i MALE-ARR FEMALE-ARR i 1- CELLS + @ CELLS + @ - FEMALE-ARR i CELLS + !
LOOP
SIZE @ 0 DO
MALE-ARR i CELLS + @ .
LOOP
;
1 ответ
Может как то так?
: array ( u "name" -- ) create cells allot does> swap cells + ;
10 constant size
size array male
size array female
: compute ( -- ) 0 0 male ! 1 0 female !
size 1 do
i i 1- female @ male @ - i female !
i i 1- male @ female @ - i male !
loop ;
: print ( u -- ) 0 do i male @ . loop ;