2011-11-14 6 views
21

엄격한 데이터 구조를 구현하는 라이브러리는 무엇입니까? 특히 엄격한 목록과 엄격한 기준을 찾고 있습니다.하스켈의 엄격한 데이터 구조를위한 라이브러리

면책 :

  1. 나는 deepseq 알고있다. 이것은 매우 유용하지만 deepseq (두 번 이상 사용될 수 있음)를 사용할 때마다 전체 데이터 구조를 탐색하는 오버 헤드를 추가합니다.

  2. 나는 엄격한 용기와 같은 데이터 구조 완전히 평가됩니다 포함 모든 것을 보장하지 않는다는 것을 알고 있지만, 구조가 자체가, 예를 들면 엄격해야

    data StrictList a = !a :$ !(StrictList a) | Empty 
    

    (여기에서, 포함 된 요소는 WHNF에 있으며 아마도 완전히 평가되지는 않았지만 목록의 구조는 무한 목록입니다. 예를 들어 무한 목록은 종결되지 않는 값입니다.)

  3. '엄격한'패키지에 대한 정보는 알고 있지만 그것은 매우 limite를 가지고있다. 엄격한 데이터 구조 세트. 엄격한 목록이나 세트를 포함하지 않습니다.

  4. 자신이 (내가 BTW, 펑터에 이동 및 접이식를 유도하기 위해 GHC의 확장을 사랑 해요.) 놀라 울 정도로 쉽게 보인다 엄격한 목록을 작성

    하지만, 더 나은 별도의 라이브러리에서 수행 될 것처럼 여전히 보인다. 그리고 집합의 효율적인 구현은 그다지 사소한 것처럼 보이지 않습니다.

+0

왜 엄격한 구조가 필요합니까? – fuz

+1

@FUZxxl 일이 지체없이 평가되는 것을 확인하면 공간 사용을 줄이고 계산을 훨씬 빠르게 할 수 있습니다. 또한 역 효과를 가질 수 있으므로 게으른 구조도 중요합니다. 효율적인 코드를 얻으려면 둘 다 필요합니다 (어디에서 사용해야하는지 알 필요가 있습니다). –

+0

@FUZxxl : Set에서 상태 모나드와 같은 일을하고 있었는데, 세트에서 요소를 삽입하고 삭제하는 경우가 많았지 만, Set을 얼마 동안 평가하지는 않았습니다. 이것은 spine-strict (감사합니다, John L) 데이터 구조에 의해 고쳐질 수있는 공간 누설을 가져 왔습니다. – shahn

답변

13

(GHC와 함께 제공)을 containers 패키지는 곧 (나는 그들이 GHC-7.4에 포함됩니다 모르겠지만, 희망하는 이유가) 엄격한 설정 및지도 변종이있을 것이다. 따라서 엄격한 세트 및지도를 효율적으로 구현하는 중입니다. 엄격한 목록은 쉽게 말할 수 있듯이 제공하는 해킹 패키지가 좋을 것이므로 모든 사람이 스스로 그렇게해야하는 것은 아닙니다. 그 밖의 무엇이 필요합니까?

+0

좋은 소리.목록과 세트 만 있으면됩니다 (당분간). – shahn

7

두 번째 사항에 대해 가장 자주 본 용어는 척추에 엄격합니다.

등뼈 엄격한 목록의 경우 Data.Seq.Sequence (컨테이너의 경우) 또는 Data.Vector (vector의 경우)을 사용할 수 있습니다. 어느 쪽도리스트가 아니지만, 당신이하고있는 것에 따라 (또는 둘 다) 더 나을 가능성이 있습니다. 시퀀스는 O (1) 단점과 snoc을 제공하며 구조의 어느 한쪽 끝으로 매우 빠르게 액세스 할 수 있습니다. Vector의 성능은 배열과 비슷합니다. Sequence에 더 많은 목록과 같은 인터페이스를 원할 경우 ListLike 패키지를 고려할 수 있습니다 (Vector에 대한 ListLike 인터페이스도 있지만, Vector는 매우 포괄적 인 인터페이스를 제공하므로 덜 유용합니다). 둘 다 척추에 엄격합니다.

엄격한 세트의 경우 엄격한지도를 제공하는 unordered-containers을 시도해 볼 수 있습니다.

+0

좋은 조언입니다. – shahn

+1

척추 엄격한 의미, 그 요소는 위의 내 StrictList 예제에서와 같이 WHNF로 평가됩니까? 그래서, 당신은 첫 번째 느낌표를 제거하고 여전히 척추 - 엄격한 전화 할 수 있을까요? – shahn

+1

@shahn : spine-strict는 컨테이너의 구조가 완전히 평가된다는 것을 의미하지만 요소는 전혀 평가되지 않을 수 있습니다. 그래서 예, 첫 번째 느낌표를 제거하고 척추에 엄격하게 적용 할 수 있습니다. –

관련 문제