2012-02-27 21 views
2

私はniltで構成される非常に大きな配列を持っています。配列の型宣言

私の質問は、コンパイラがこの特定の型の配列を扱う関数内で型宣言を行うのは意味があります。もしそうなら、宣言はどのように見えますか?例えば

:Common Lispのタイプ(array boolean)のアレイ(BOOLEANが適用可能なタイプである)だけのみt sおよびnil Sを含有するように起こる配列でないこと

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

答えて

3

最初の通知が、それらを含むことができる配列は、配列の作成中に指定する必要があるプロパティです。これを違反すると、あなたのsafetyレベルに応じて、実行時エラーまたは未定義の動作が発生します。

適用可能な最適化があるとは思わないので、機能レベルで型を指定することに多大な注意が必要と思われます。 bit-vectorsを使用することを検討してください。これらは少なくともきつく詰まっており、高速ビット処理命令を使用することができます。つまり、データが多次元の(array bit)配列にどれだけ適用されているかわからないため、データが1次元で表現可能な場合です。

+0

'(mod 2)型の多次元配列は、多次元ビット配列として正常に動作します。 –