Arrays 如何在BCPL中初始化数组数组?
我尝试了Arrays 如何在BCPL中初始化数组数组?,arrays,initialization,bcpl,Arrays,Initialization,Bcpl,我尝试了让stringArr=newvec(12)
让stringArr=newvec(12)然后尝试初始化数组中的每个点:let stringArr!i=newvec(5)代码>但这会返回一个错误,告诉我我不能这样做。这里有人能帮我学这种恐龙语言吗 你把我的记忆扩展了一点(大约三十年),但我似乎记得let
只用于创建新的局部变量(也包括函数和其他东西,但这与你的问题并不相关)
因此,语句let stringArr=newvec(12)
在创建新变量stringArr
或更准确地说,一个12单元匿名向量和保存该向量地址的stringArr
变量时有效
然而,让stringArr!i=newvec(5)
无效,因为stringArr!i
实际上不是一个新变量。它只是已经存在的stringArr
向量中单元格编号i
的内存内容
换句话说,语句let stringArr=newvec(12)
创建初始指针单元格和第二层指针,这两层指针都不会指向任何有用的地方:
+-----------+
| stringArr | ---+
+-----------+ | +-------------+
+--> | stringArr!0 | --> ?
+-------------+
| stringArr!1 | --> ?
+-------------+
: : :
+-------------+
| stringArr!N | --> ?
+-------------+
而且,由于指针已经存在,您不应该使用let
来设置它们
与C语言类似,您不会编写:
int xyzzy[10]; // Make array of ten elements.
int xyzzy[0] = 42; // Set first element to something.
由于第二行不应该定义新变量,因此它的目的只是将现有元素中的一个设置为给定值,使用xyzy[0]=42
因此,在BCPL中实现目标的正确方法是避免对第二类语句使用let
关键字:
let stringArr = newvec(12) // Create new vector AND new variable,
// put vector address into cell for
// that variable.
stringArr!i := newvec(5) // Create new vector, put vector
// address into EXISTING cell.
解决方案是合理的,但我的两个BCPL版本(Martin Richard和Robert Nordier的obcpl)都抱怨newvec(),并且在第二行中要求:=而不是=。我让它与:
let stringArr = getvec(12)
stringArr!i := getvec(12)
约翰·布特兰(John Boutland)哇,BCPL还在哪里使用?@Barmar推特。只是开玩笑,一门特定的大学课程。我看不到代码>字符在BCPL参考手册的任何地方啊,它看起来像是在1979年版本的BCPL中,而不是1967年版本。感谢您的编辑,wogsland。我不知道(现在仍然不知道)如何获得这种格式的代码。JohnJohn,我想你可能已经在3.5年内找到了答案:-)但是,为了以防万一,你必须确保代码前有一个空行,并且每行代码都以四个空格开头。可以标记文本块,然后使用CTRL-K对其进行代码缩进。另外,还有一个三回溯法,但我从来没有使用过,所以不能建议。