2012-02-27 115 views
2

我有一个非常大的数组,只有nil s和t s。数组的类型声明

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

例如:

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

回答

3

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

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

+0

类型为'(mod 2)的多维数组很适合用作多维位数组。 – 2012-02-27 20:08:36