我有一个非常大的数组,只包含nil
和t
s。
我的问题是;编译器在处理这种特定类型数组的函数中进行类型声明是否有意义。如果是这样,宣言应该是什么样的?
例如:
(defun foo(my-array)
(declare (type (array ?????) my-array))
....
答案 0 :(得分:3)
首先注意,在Common Lisp中,类型(array boolean)
的数组(其中BOOLEAN是适用的类型)不是恰好只包含t
和{{1 s,但是一个只能包含那些的数组,这是在创建数组期间必须指定的属性。违反此操作将导致运行时错误或未定义的行为,具体取决于您的nil
级别。
我认为在功能级别指定类型没有多大意义,因为我不相信有任何适用的优化。您可以考虑使用bit-vectors,它们至少紧密包装并允许使用快速位处理指令。也就是说,如果您的数据可以在一个维度上表示,那么我不确定这些数据适用于多维safety
数组。