2012-02-27 8 views
2

У меня очень большой массив, состоящий только из nil и t.объявление типа массивов

Мои вопросы: имеет смысл для компилятора сделать объявление типа внутри функции, которая обрабатывает этот конкретный тип массива. Если да, то как должно выглядеть заявление?

Например:

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

ответ

3

Первое уведомление, что в Common Lisp массив типа (array boolean) (где BOOLEAN является применимым типа) не является массивом, который как раз случается содержать только t с и nil с, но массив, который может содержать только те, которые являются свойствами, которые должны быть указаны во время создания массива. Нарушение этого приведет к ошибке во время выполнения или неопределенному поведению в зависимости от вашего уровня safety.

Я не думаю, что есть указание указать тип на уровне функции, так как я не верю, что есть какая-либо применимая оптимизация. Вы можете использовать bit-vectors, которые, по крайней мере, плотно упакованы и позволяют использовать инструкции быстрой обработки бит. То есть, если ваши данные представлены в одном измерении, так как я не уверен, насколько они применимы к многомерным массивам (array bit).

+0

Многомерные массивы с типом '(mod 2) отлично работают как многомерные битовые массивы. –

Смежные вопросы