数组的类型声明

时间:2012-02-27 19:25:41

标签: common-lisp

我有一个非常大的数组,只包含nilt s。

我的问题是;编译器在处理这种特定类型数组的函数中进行类型声明是否有意义。如果是这样,宣言应该是什么样的?

例如:

(defun foo(my-array)
     (declare (type (array ?????) my-array))
      ....

1 个答案:

答案 0 :(得分:3)

首先注意,在Common Lisp中,类型(array boolean)的数组(其中BOOLEAN是适用的类型)不是恰好只包含t和{{1 s,但是一个只能包含那些的数组,这是在创建数组期间必须指定的属性。违反此操作将导致运行时错误或未定义的行为,具体取决于您的nil级别。

我认为在功能级别指定类型没有多大意义,因为我不相信有任何适用的优化。您可以考虑使用bit-vectors,它们至少紧密包装并允许使用快速位处理指令。也就是说,如果您的数据可以在一个维度上表示,那么我不确定这些数据适用于多维safety数组。