如何将列表传递给 BASIC-256 中的子例程

How to pass a list to a subroutine in BASIC-256

我很难将列表传递给子例程(尴尬);我收到编译器错误。我遵循了关于数组 (http://doc.basic256.org/doku.php?id=en:arrays) 的 BASIC-256 文档,并根据需要在子例程参数中包含了 [] 括号:

subroutine print_list(list) # or subroutine print_list(list[]) <----- **compiler** error occurs here
   for element=0 to list[?]-1
      print list[element]
   next element
end subroutine

subroutine main()
   list = {5.9, 6.0, 5.9, 5.7, 5.6, 5.7}
   call print_list(list[]) #  <----- **compiler** error occurs here
end subroutine

call main()

编译器抱怨我在子程序调用参数部分有错误。

我试过通过以下方法解决这个问题; (i) 检查我的列表初始化; (ii) 检查子程序定义和参数(编译器也不喜欢那里的方括号); (iii) 从参数中排除 [] 括号,并且 (iv) 尝试联系 BASIC-256 Facebook 页面。

感谢您的宝贵时间....

传递数据数组时,必须在变量名后包含一组空括号 []。这是为了减少常规变量和包含值数组的变量之间的混淆。

因此,在您的情况下,将您的方法签名从 subroutine print_list(list) 更改为 subroutine print_list(list[])

Referring to this link 如果您有任何其他问题。

根据网站上的信息,您不能将数组传递给您自己的子程序,只能传递给内部(内置)子程序。

如果变量本质上是全局的,那没问题,只需对数组执行任何你想要的操作,但如果它们需要是局部的,则不能使用 BASIC 的这种特殊变体来完成。

通读 documentation 后,有一个名为 'ref' 的函数允许您通过引用函数或子例程来传递变量或数组。这样做可以让我打印数组内容。

这是我之前重写的代码以通过引用传递数组:

subroutine print_list(list)
   for element=0 to list[?]-1
      print list[element]
   next element
end subroutine

subroutine main()
   list = {5.9, 6.0, 5.9, 5.7, 5.6, 5.7}
   call print_list(ref(list)) 
end subroutine

call main()