我正在尝试编写一个程序来为我求和一个数组,但是当我尝试运行单词 sum 时,它一直给我一个非常长的数字,类似于一个地址。我尝试将它拆开并在终端中的单词之外逐行运行并手动循环工作正常,但是当我真正让它工作时它完全失败了。我究竟做错了什么?
variable length \ length var declared
create list \ space for my list made
0 variable cumsum \ sum value initialized to zero
: upload ( n1 n2 n3 --) \ loops thru and stuffs data into array
depth ( n1 n2 n3 -- n1 n2 n3 depth) \ get depth
length ! ( n1 n2 n3 depth -- n1 n2 n3) \ array length stored
list ( n1 n2 n3 -- n1 n2 n3 addr)
length @ ( n1 n2 n3 addr -- n1 n2 n3 addr nlength)
cells allot ( n1 n2 n3 addr nlength -- n1 n2 n3)
length @ 1+ ( n1 n2 n3 -- n1 n2 n3 nlength) \ consume all entries
0 ( n1 n2 n3 nl -- n1 n2 n3 nl 0) \ lower loop parameter..
do ( n1 n2 n3 nl 0 -- n1 n2 n3) \ loop begins
list ( n1 n2 n3 -- n1 n2 n3 addr)
I ( n1 n2 n3 addr -- n1 n2 n3 addr I) \ calculating address
cells ( n1 n2 n3 addr I -- n1 n2 n3 addr Ibytes)
+ ( n1 n2 n3 addr Ibytes -- n1 n2 n3 addr1+)
! ( n1 n2 n3 addr1+ -- n1 n2) \ storing into calculated address
loop
;
上传就像一个魅力,但后来我去使用这个词
: sum ( n1 n2 n3 -- nsum)
upload \ initiates the array
length @ \ invokes upper limit of loop
0 \ lower limit of loop
do
list ( -- addr) \ addr invoked
I cells + ( addr -- addr+) \ offset calculated and added
@ ( addr+ -- nl) \ registered value at address fetched
cumsum @ ( nl -- nl ncs) \ cum sum value fetched to stack
+ ( nl ncs -- nsum) \ summation
cumsum ! ( nsum --) \ new sum written to cumsum
loop
cumsum ? ( -- cumsum) \ show sum
;
它返回一个非常长的数字,看起来像一个地址,而不是我添加来测试它的一些小数字列表的总和。
1 ok
2 ok
3 ok
sum 140313777201982 ok