2011-01-22 7 views
5

안녕하세요, 이것은 Stack Overflow에 게시 한 첫 번째 시간이며 OCaml에서 유형을 생성하는 동안 문제가 발생했습니다.OCaml의 재귀 적 유형?

nodes/leafs/etc가있는 유형 트리를 생성하려고합니다. 이것은 내가 지금까지 가지고있는 것이다.

내 노드는 그 이름과 터플로 다른 트리를 포함하는 유형으로되어 있습니다. 그러나 이것을 컴파일하려 할 때 트리는 두 개의 인수가 필요하다고했습니다. 그래서 시도 :

type ('a, 'b) tree = Empty | Leaf of 'b | Node of ('a * tree ('a*'b)) 

나는 여전히 오류가 발생했습니다. 내가 잘못하고있는 것을 눈치 채는 것? 감사! 타입 선언에보다주의, Foo of bar * bazFoo of (bar * baz)가 동일하지 :

type ('a, 'b) tree = Empty | Leaf of 'b | Node of ('a, 'b) tree * 'a * ('a, 'b) tree 

PS는하지만

+0

내 문구가 틀렸어. 실제로는 노드 ('a * ('a, 'b) 트리) – Brian

+1

맞아야합니다. 그것은 당신의 질문에 대답하기 때문에 gasche의 대답을 받아들이는 것이 정중 할 것입니다. 나뭇잎과 인테리어 노드에 고유 한 유형을 원한다고 확신 할 수 있습니까? –

답변

9
type ('a, 'b) tree = Empty | Leaf of 'b | Node of 'a * ('a, 'b) tree 

당신은 아마 당신의 노드 두 개 이상의 자녀가 할 첫 번째 생성자 Foo입니다 두 개의 필드가있는 경우 두 번째 필드에는 (bar * baz) 유형의 필드가 하나만 있습니다.

+0

생성자 정의에서 괄호를 생략했을 때의 영향을 설명 할 수 있습니까? 나는'bar * baz'가 튜플을 정의하는 단순한 방법이라고 생각했습니다. – Antoine