2011-07-02 21 views
2

私はOcamlで2次元配列を操作しています。Ocamlでの配列操作

1)長さがint64の配列を宣言するには、intの代わりに?たとえば、Array.make : int -> 'a -> 'a arrayの場合、インデックスがint64の大きな配列が必要な場合はどうなりますか?

2)私は、次のように記述する可能性があります。私たちはletarrayの値を変更するため

let array = Array.make_matrix 10 10 0 in 
array.(1).(2) <- 5; array.(3).(4) <- 20; (* where I modify a part of values in array) 
f array ... 
... 

上記のコードは、私には不自然に思える、私がこれまで持っている、または存在しませんこれを行うにはもっと自然な方法?

助けてもらえますか?どうもありがとうございました!

答えて

4

64ビットシステムでは、アレイモジュールからのOCamlアレイのサイズは2^54-1に制限され、32ビットシステムでは4,194,303に制限されます。 floatの配列の場合、制限は2倍小さくなります。どちらの場合も、インデックスはintとして簡単に表現されるため、int64をインデックスとして使用する利点はありません。

32ビットシステムの値は、いくつかの問題ではの方法であり、大きすぎる配列を表す別のモジュールBigarrayがあります。はるかに大きな配列をサポートしますが、インデックスはまだintです。本当に大きなインデックスを必要とする場合は、おそらく64ビットシステムであり、これはそのような制限ではありません。とにかくアドレス空間を使い果たすつもりだと思います。たぶんあなたが本当に欲しいのはハッシュテーブルですか?

"let"について何を言っているのか分かりません。 letの目的は、何かに名前を付けることです。配列に値を格納する前に、配列に名前を付けるのは不合理ではありません。配列を作成するときに値を定義する場合は、Array.initを使用して、配列値を設定するための任意の関数を記述できます。

OCamlの配列コードは本質的に必須であるため、通常、その外観を持つコードになります。私はしばしばbeginendを使用し、それだけでアルゴリックな品質を取り入れています。