Common Lisp中数组/向量类型的区别?

cl-*_*y11 3 arrays types vector common-lisp

类型'vector',simple-vector,'array和'simple-array之间有什么区别?我知道向量是数组的子类型,不能是多维的."简单"版本似乎是类型,其余类别.因此,类型可能更复杂,以指定类型.

我应该使用哪种类型说明符?指定向量的最佳方法是什么?

Rai*_*wig 7

矢量是一维数组.

如果它们没有移位,没有填充指针,并且没有明确可调,它们很简单.简单向量还需要能够容纳任何类型的元素.

我应该使用哪种类型说明符?

我想这取决于你想做什么.


sds*_*sds 6

雷纳回答了你问题的积极部分.

以下是规范部分的答案:

我应该使用哪种类型说明符?

你应该使用任何,除非你知道你正在做的非常清楚.

Common Lisp中的类型注释是可选的; 他们打算在专家的性能优化.您不太可能从类型声明中获得任何好处,并且您极有可能受到它们的伤害.

  • 什么是专家,为什么类型注释适合他们,以及如何成为专家以便您可以使用它们?单个或双浮点数组最终成为类型数组的非常专业和常见的用途,当实现支持时,这确实有所作为.大多数实现实际上是一个平面数组,而不是一个具有盒装值的数组.如果类型声明可能会受到伤害,至少可以解释为什么(例如,当我们也``(声明(优化(安全0)))时会发生什么,而不仅仅是这样说. (3认同)