BBC Basic 将一个数组添加到另一个数组

BBC Basic Add an array to another array

我正在尝试将一个数组添加到一个主要使用 ARRAYLIB 的数组。到目前为止我所做的一切都没有奏效

INSTALL @lib$ + "ARRAYLIB"
DIM ARRAY1(0)
DIM ARRAY2(3)
LET ARRAY2() = 1, 2, 3, 4

ARRAY1 是主数组,ARRAY2 是我要附加到 ARRAY1 的数组。这就是我卡住的地方,因为我尝试过的一切都不起作用。

PROC_add(ARRAY1(), ARRAY2())
PROC_add(ARRAY1(), (ARRAY2(0), ARRAY2(1), ARRAY2(2), ARRAY2(3))
PROC_add(ARRAY1(), ARRAY2(0), ARRAY2(1), ARRAY2(2), ARRAY2(3)

Proc_add 没有像您期望的那样追加数组。它将标量值添加到数组的所有元素。

 INSTALL @lib$ + "ARRAYLIB"
 DIM ARRAY(3)
 LET ARRAY() = 1, 2, 3, 4
 PROC_add(ARRAY(), 1) 

 DIM N% 0
 FOR N%=0 TO 3
   PRINT ARRAY(N%)
 NEXT

会产生类似

的输出
2
3
4
5

为了附加两个数组,您需要创建第三个数组并将两个数组复制到其中。

  DIM ARRAY1(0)                  ; 1 element
  DIM ARRAY2(3)                  ; 4 elements
  LET ARRAY2() = 1, 2, 3, 4

  N1% = DIM(ARRAY1(),1)          ; N1% = 0
  N2% = DIM(ARRAY2(),1)          ; N2% = 3
  DIM ARRAY3(N1%+N2%+1)          ; 5 elements

  FOR N% = 0 TO N1%              ; FOR N% = 0 TO 0
    ARRAY3(N%) = ARRAY1(N%)
  NEXT

  FOR N% = N1% TO N1%+N2%        ; FOR N% = 0 TO 3 
    ARRAY3(N%+1) = ARRAY2(N%)       
  NEXT

  FOR N%=0 TO N1%+N2%+1
    PRINT ARRAY3(N%)             ; Prints 0,1,2,3,4
  NEXT

或者您可以编写自己的连接程序,如下所示:

  DIM ARRAY1(0)
  DIM ARRAY2(3)
  LET ARRAY2() = 1, 2, 3, 4

  PROC_Concat(ARRAY1(), ARRAY2(), ARRAY3())

  FOR N% = 0 TO 4
    PRINT ARRAY3(N%)
  NEXT

  END

  DEF PROC_Concat(A1(), A2(), RETURN A3())
  LOCAL N1%, N2%
  N1% = DIM(A1(), 1)
  N2% = DIM(A2(), 1)
  DIM A3(N1%+N2%+1)
  SYS "RtlMoveMemory", ^A3(0), ^A1(0), 10*(N1%+1)
  SYS "RtlMoveMemory", ^A3(N1%+1), ^A2(0), 10*(N2%+1)
  ENDPROC