根据我对数组的了解,似乎Racket中的列表可能符合定义.数组需要能够存储不同类型的数据并进行排序.Racket中的列表符合这些要求.但是,阵列也需要编入索引,我不确定Racket中的列表是否符合此要求.
列表不是数组,因为列表不是随机访问.数组的Scheme模拟是向量.
创建向量时,您可以预先声明向量的大小(显式地作为参数make-vector,或隐式地基于您调用的参数数量vector,或隐式地,如果您正在使用list->vector,基于列表的大小) '复制'.然后,您可以根据索引读取(vector-ref)和write(vector-set!)各个元素.
矢量无法调整大小; 如果你需要一个新的大小,你需要创建一个新的向量并使用它复制元素vector-copy(如果你同时创建新的向量)或vector-copy!(如果你要复制到你自己创建的向量).
相反,列表只是零个或多个以特定方式链接在一起的缺点单元格,最终指向空列表.特别地,空列表()是列表,并且列表中的cdr点是列表的任何利弊单元.因为你必须追逐cons单元,所以没有随机访问:要到达列表的第n个元素,它需要与n成比例的时间(列表索引是O(n)).
相反,它需要大致相同的时间(如果我们忽略诸如缓存局部性之类的东西)来访问向量的任何元素(向量索引是O(1)).