2012-02-27 4 views
2

J'ai un très grand tableau composé uniquement de nil s et t s.type déclaration de tableaux

Mes questions sont; est-il sensé pour le compilateur de faire une déclaration de type dans une fonction qui gère ce type spécifique de tableau. Si oui, à quoi devrait ressembler la déclaration?

Par exemple:

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

Répondre

3

avis d'abord que Common Lisp un tableau de type (array boolean) (où BOOLEAN est le type applicable) n'est pas un tableau qui arrive juste pour ne contenir que t s et nil s, mais un tableau qui ne peut contenir que ceux-ci, qui est une propriété qui doit être spécifiée lors de la création du tableau. La violation de ce résultat entraînera une erreur d'exécution ou un comportement indéfini en fonction de votre niveau safety.

Je ne pense pas qu'il y ait grand intérêt à spécifier le type au niveau de la fonction, car je ne crois pas qu'il y ait d'optimisations applicables. Vous pouvez envisager d'utiliser bit-vectors, qui sont au moins étroitement emballés et permettent l'utilisation d'instructions de traitement de bits rapides. C'est-à-dire, si vos données sont représentables dans une dimension, puisque je ne suis pas sûr combien ils s'appliquent pour les tableaux multidimensionnels (array bit).

+0

Les tableaux multidimensionnels de type '(mod 2) fonctionnent très bien sous la forme de réseaux de bits multidimensionnels. –