2016-06-21 5 views
3

음수가 아닌 정수 n이 주어지면 {1, ..., n}의 거듭 제곱을 반환하는 함수를 작성하고 싶습니다. 따라서 찾을 수있는 Set.S 모듈을 사용하고 싶습니다. here. 하지만 가져올 수는 없습니다. 나는 다음과 같은 코드를 실행하면 :OCaml에서 세트를 사용하려면 어떻게해야합니까?

File "countTopologies.ml", line 1, characters 5-10: 
Error: Unbound module Set.S 

어쩌면 난 그냥 내 컴퓨터에 설치되어있는 Set.S 모듈을 가지고 있지 않습니다

open Set.S 

let rec power_set n = 
    if n = 0 then add empty empty else union (iter (add n s) power_set (n-1)) (power_set (n-1));; 

let print_set s = SS.iter print_endline s;; 

print_set (power_set 2) 

을 나는 오류가? (OCaml을 설치하는 데 필요한 맨손의 뼈대 만 만들었습니다). 이 경우, 어떻게 얻을 수 있습니까?

+0

관련 : http://stackoverflow.com/questions/1452218/ocaml-set - 모듈 –

답변

6

Set.S모듈 형하지 모듈입니다 :

module SI = Set.Make(struct type t = int let compare = compare end) 

그럼 당신은 INT의 설정을 할 수 있습니다. 모듈 만 열 수 있습니다. 사실 모듈에서 Set 세 가지 요소가 포함

  • 모듈 형 OrderedType 모듈의 유형이 그 주문 유형을 구현; 모듈 SSet 데이터 구조를 구현하는 모듈 유형입니다.
  • functor MakeOrderedType 유형의 모듈을 사용하고 S 유형의 모듈을 반환합니다. , Janestreet의 핵심 라이브러리처럼

    module Int = struct 
        type t = int 
        (* use Pervasives compare *) 
        let compare = compare 
    end 
    
    module Ints = Set.Make(Int) 
    

    다른 라이브러리 예를 들어, 상자 밖으로 세트를 제공합니다

예를 들어, 정수의 집합을 구현하는 모듈을 만들려면 다음 작업을 수행 할 수 있습니다 , 코어 라이브러리가 이미 세트,지도, 해시 테이블로 기소 된 Int 모듈을 가지고, 그래서 어떤 펑없이 액세스 할 수 있습니다

open Core.Std 

let nil = Int.Set.empty 
3

집합 작성기에서 집합 모듈 Make이 있어야합니다.

# let myset = SI.add 3 SI.empty;; 
val myset : SI.t = <abstr> 
# SI.elements myset;; 
- : SI.elt list = [3] 
관련 문제