OCaml을 사용하여 데이터 세트를 생성하고 이들 사이를 비교하려고합니다. Set.OrderType
, Set.Make
등의 모듈 유형에 대한 설명서를 보았지만 세트를 초기화하거나 달리 사용하는 방법을 알 수 없습니다.OCaml : 모듈을 설정하십시오.
16
A
답변
28
세트는 재미있는 인터페이스를 사용하여 정의됩니다. 주어진 유형에 대해 Set.Make
펑터를 사용하여 해당 유형의 Set
모듈을 만들어야합니다. 표준 라이브러리에 대한 불행한 감독은 기본 유형에 Set
인스턴스를 정의하지 않는다는 것입니다. 대부분의 간단한 경우에는 Pervasives.compare
을 사용하면 충분합니다. 여기 int
작동 정의는 다음과 같습니다
module IntSet = Set.Make(
struct
let compare = Pervasives.compare
type t = int
end)
모듈 IntSet
이 Set.S
인터페이스를 구현합니다. 이제 IntSet
모듈을 사용하여 세트에서 작동 할 수 있습니다 : 당신이 명시 적으로 OrderedType
로 Set.Make
의 입력 구조를 정의 할 필요가 없습니다
let s = IntSet.empty ;;
let t = IntSet.add 1 s ;;
let u = IntSet.add 2 s ;;
let tu = IntSet.union t u ;;
참고; 타입 유추가 당신을 위해 일을 할 것입니다. 당신은 펑터를 사용하여 몇 가지들이 generic을 잃게
module IntMap = Map.Make(IntOrder)
때문이 당신이 Map
의 인스턴스를 같은 모듈을 다시 사용할 수있는 장점이있다
module IntOrder : Set.OrderedType = struct
type t = int
let compare = Pervasives.compare
end
module IntSet = Set.Make(IntOrder)
: 다른 방법으로는 다음과 같은 정의를 사용할 수 있습니다 요소의 유형은 고정되어 있습니다. 예를 들어 임의의 형식의 Set
을 사용하는 함수를 정의 할 수 없으며 일부 연산을 수행합니다. 다행히도 Set
모듈은 Set
에 많은 유용한 연산을 선언합니다.
9
Chris의 답변 외에도 일부 표준 라이브러리 모듈은 이미 OrderedType
서명을 준수한다고 말할 수 있습니다. 예를 들어 다음과 같이 간단히 할 수 있습니다.
module StringSet = Set.Make(String) ;; (* sets of strings *)
module Int64Set = Set.Make(Int64) ;; (* sets of int64s *)
module StringSetSet = Set.Make(StringSet) ;; (* sets of sets of strings *)
등등.
다음은 StringSet
의 간단한 사용 예입니다. 세트가 기능적인 데이터 구조이므로 새로운 세트를 세트에 추가하면 새로운 세트가 리턴됩니다.
let set = List.fold_right StringSet.add ["foo";"bar";"baz"] StringSet.empty ;;
StringSet.mem "bar" set ;; (* returns true *)
StringSet.mem "zzz" set ;; (* returns false *)
관련 문제
- 1. DNN LogIn 모듈을 수평으로 설정하십시오.
- 2. Ocaml 소개
- 3. Ocaml 구현
- 4. Windows 2003 서버에서 C# http 모듈을 32 비트 모드로 설정하십시오.
- 5. Symfony에서 응용 프로그램 또는 모듈을 사용하지 않도록 설정하십시오.
- 6. OCaml 명시 적 형식 서명
- 7. OCaml : 트리 함수
- 8. OpenMP with OCAML
- 9. OCaml 라이브러리를 설치하기위한 Makefile
- 10. 파일에서 반환 값 - ocaml
- 11. ocaml 패턴 일치 질문
- 12. OCaml 빈 글로벌 변수
- 13. mealy machine in ocaml
- 14. OCaml 패턴은 내장형에서 일치합니다.
- 15. OCaml 펑터를 설명해 주시겠습니까?
- 16. OCaml 객체의 재귀 함수
- 17. Ocaml 구문 오류
- 18. ocaml 그래픽으로 이미지 저장
- 19. Ocaml Pattern Matching
- 20. OCaml 레코드에 접근하기
- 21. 독립형 OCaml 프로그램 빌드하기
- 22. 모듈 사용 Ocaml 집합
- 23. Ocaml 자체 참조
- 24. Ocaml - 반복 반복
- 25. OCaml : List.fold_left는 어떻게 작동합니까?
- 26. Topological sort in OCaml
- 27. OCaml 구조체 타이핑과리스트
- 28. OCaml : 함수 인자의 기본값?
- 29. 예쁜 인쇄용 OCaml
- 30. 목록에 요소 결합하기 - OCaml
"임의의 유형의 세트를 사용하는 함수를 정의 할 수 없습니다" 그러나 특정 Set 모듈을 매개 변수로 사용하는 Functor 내부에서 함수를 정의하여 동일한 작업을 수행 할 수 있습니다. 하지만 프로그래머가이 펑터를 사용하여 또 다른 모듈을 만들어야하므로 물론 사용하기에 덜 편리합니다. – newacct
오른쪽. 그것은 펑터 (functor)입니다. –