Haskellで真のベクタータイプを実装するにはどうすればよいですか?何かをベクターにするためには、O(1)ランダムアクセスを使用して、メモリに順番に格納する必要があります。しかし、Haskellはそのメモリ管理を隠し、そのデータ型はツリーを記述します!では、そのような要件をどのように表現できますか?

コメント

  • 真のベクトルの数学的定義を使用します。こちら'ベクトル空間ライブラリ hackage.haskell.org/package/vector-space-0.8.7/docs/ …
  • Vectorの要件はどこから来ていますか? ' vector 'という用語の複数の定義を知っていますが、そのような要件があるのはそのうちの1つだけです(C ++ ' s std::vector)。
  • CまたはC ++などのレジスタに値を格納する方法と同じ方法で拡張するか、無料でGC言語のメモリ-コンパイラは自由にデータを再配置したり、値をレジスタなどに入れたり、(extensions)[ tinyurl.com/ovvxtqt]/(libraries)で公開したりできます。 [http://hackage.haskell.org/… 本当に必要な場合はプログラマーに通知しますが、ほとんどの場合、プログラマーは'気にしないと想定しています。同様に、Haskellプログラマーは'ほとんどの場合、データがメモリのシーケンシャル領域にパックされているかどうかを気にしません。たとえば、評価の必要性を完全に排除します。

回答

Haskellのすべてのデータ型がツリーであるとは限りません。関数やIntなどの組み込み型もあります。その中には、タイプ Array があり、その要素へのO(1)アクセスが可能です。

GHCなどの一部のコンパイラも提供しています。ボックス化されていない配列。これらはメモリの使用量が少なく、要素ごとのアクセスが高速ですが、もちろん複雑さは変わりません。

これらの配列に加えて、std::vector。例として、ベクトルライブラリがあります。

回答

ベクターパッケージのData.Vector.UnboxedData.Vector.Mutableを確認する必要があります。

https://hackage.haskell.org/package/vector

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です