Haskell에서 진정한 벡터 유형을 구현하려면 어떻게해야합니까? 무언가가 벡터가 되려면 O(1) 랜덤 액세스를 사용하여 메모리에 순차적으로 저장되어야합니다. 그러나 Haskell은 메모리 관리를 숨기고 데이터 유형은 트리를 설명합니다! 그렇다면 이러한 요구 사항을 어떻게 표현할 수 있습니까?

설명

  • 진 벡터에 대한 수학적 정의를 사용하십시오. 여기 ' hackage.haskell.org/package/vector-space-0.8.7/docs/ …
  • Vector에 대한 이러한 요구 사항은 어디에서 왔습니까? ' 벡터 '라는 용어에 대한 여러 정의를 알고 있으며 그중 하나에 만 이러한 요구 사항이 있습니다 (C ++ ' s std::vector).
  • C 또는 C ++에서 값을 레지스터에 저장하는 방법과 동일한 방식으로 확장하거나 GC 언어의 메모리-컴파일러는 자유롭게 데이터를 재 배열하고 값을 레지스터에 넣거나 (확장자) [ tinyurl.com/ovvxtqt] / (libraries)를 통해 항목을 노출 할 수 있습니다. [http://hackage.haskell.org/… 프로그래머에게 정말로 필요한 경우-하지만 대부분의 경우에는 상관하지 않는다고 가정합니다 '. 비슷한 방식으로 Haskell 프로그래머는 평가의 필요성을 완전히 제거하는 대신에 데이터가 순차적 인 메모리 영역에 압축되어 있는지 대부분의 경우에 신경 쓰지 않습니다.
  • ' / ul>

Answer

Haskell의 모든 데이터 유형이 트리는 아닙니다. 함수 또는 Int와 같은 내장 유형도 있습니다. 그중에는 요소에 대한 O (1) 액세스를 제공하는 Array 유형이 있습니다.

GHC와 같은 일부 컴파일러도 제공합니다. unboxed 배열. 메모리를 적게 사용하고 요소 당 액세스가 더 빠르지 만 물론 복잡성은 변경되지 않습니다.

이러한 배열 위에 std::vector. 예는 벡터 라이브러리입니다.

답변

벡터 패키지에서 Data.Vector.UnboxedData.Vector.Mutable를 확인해야합니다.

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

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다