2017-10-31 16 views
0

저는 클래스 용 OCaml을 배웠고 이진 트리의 미러 이미지 계산을 할당 받았습니다.OCaml 바이너리 트리 미러 이미지

let tree1 = Node(1, Node(2, Node(3, Empty, Empty), Empty), Node(4, Empty, Empty)) 
;; 

샘플 출력 :

mirror tree1 = Node(1, Node(4, Empty, Empty), Node(2, Empty, Node(3, Empty, Empty))) 
;; 
+1

https://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions 간단한 무언가 시작 – gallais

+1

: 코드가 될 수있는 것을 Node (1, Empty, Empty)를 미러링 하시겠습니까? 노드 (1, 노드 (2, 빈, 빈), 빈)? 그런 다음 일반화하십시오 (아래 진의 답변 참조). 시련을 게시하십시오. 그러면 도움을 얻을 수있는 기회가 더 많이 생깁니다. –

+1

일반적으로 ML에서는 패턴 매칭을 사용하지만, 여러분이나 강사가 [s-expressions] (https://en.wikipedia.org/wiki/Cons)와 유사한 샘플을 제공하는 것은 흥미 롭습니다. – PieOhPah

답변

2

match 기능을 사용하여 나는

type btree = Empty | Node of int * btree * btree 
;; 

let mirror : btree -> btree 
    = fun t -> (* Code *) 

샘플 입력이 ... 꽤 붙어하여 시작하는 방법을 잘 모르겠습니다.

값 유형에 따라 match의 구조를 정의 할 수 있습니다. 귀하의 예에서 btree 유형의 값은 Empty 생성자 또는 Node of int * btree * btree의 튜플 생성자 중 하나로 생성됩니다.

... 
match t with 
| Node (num, lt, rt) -> (* do something to switch the subtrees, and mirror the subtrees themselves *) 
| Empty -> (* do nothing *) 
... 

을하고 mirror 기능 유형 btree -> btree이기 때문에, 당신 매치의 경우 각각의 유형 btree의 유효한 값을 반환해야합니다 :이 같은 결과가 발생해야한다.

참조 : http://ocaml.org/learn/tutorials/data_types_and_matching.html#Pattern-matching-on-datatypes