2017-03-07 7 views
0

이의 말을하자 빈 나무와 N-ary_tree 일치 I는 n 차 트리 형OCaml의 -

type tree = Node of (char*tree) list ref;; 

와 내가 쓰기 위해 노력하고있어

let empty_tree()= Node(ref[]);; 

빈 트리이 대응을 내 나무가 비어 있거나없는 경우에만 보이는 기능과 같은

let checkIsEmpty t = match t with empty_tree-> print_string "tree is empty";; 

하지만 그것은 단지 단위를 반환 checkIsEmpty empty_tree;;을 쓸 때, 그것은하지 않습니다 인쇄 나는 또한

let checkisEmpty t = match t with z when z = empty_tree-> print_string "tree is empty";; 

는 슬프게도 여전히 실패 그 방법을 시도

"나무는 비어 있습니다."

트리가 비어있는 경우 어떻게 볼 수 있습니까? 가능한 경우 일치를 유지하고 트리가 선언되는 방식 (빈은 유형의 일부가 아닙니다 ..)을 유지하려고합니다.

감사합니다.

답변

0

출력을 확인하려면 출력을 플러시해야 할 가능성이 큽니다. 다음과 같이 쓸 수 있습니다 :

print_string "tree is empty"; flush stdout 

그러나 첫 경기는 효과가 없습니다. 패턴의 모든 식별자는 새로운 변수를 도입합니다. 따라서 첫 번째 구현에서 변수 empty_tree은 함수에 전달하는 트리와 항상 일치합니다. (실제로는 어떤 값과도 일치합니다.)

flush stdout을 추가하고 비어있는 트리 인 전역 값 empty_tree이 있다고 가정하면 두 번째 구현은 조금 더 잘 작동합니다. 그러나 트리가 이 아니고이 아닌 경우 일치하는 사례도 추가해야합니다. 그렇지 않으면 그 경우 예외가 발생합니다.

또한 empty_tree은 빈 트리를 반환하는 함수입니다. 빈 트리 자체가 아닙니다 (최신 코드가 가정하고있는 것처럼).

는 (당신이 그것을 요구 후 너무 많은 질문을 수정하지 제안합니다. 그것은 힘든 당신이 무엇을 요구에 해당하는 답을 작성할 수 있습니다.)

+0

감사 답변을, 그래 나는 내가 어떻게해야 알고 대/소문자가 비어 있지 않은 경우를위한 경우지만 지금은 트리가 내 함수에 전달 된 트리가 empty_tree와 같으면 내 트리를 일치 시키려고합니다. 플러시 표준 출력을 시도했지만 그 중 하나는 작동하지 않습니다. with "when"keyword) – anthomaxcool

+0

나는 문자 그대로 checkisEmpty empty_tree를 수행하고 있으며, t (이 경우에는 empty_tree)가 empty_tree와 같고 "tree is empty"를 쓰지 않을 것입니다. 내가 '_ _ -> print_string'이 아닌 경우를 추가하면, 플러시 stdout' 인쇄되지 않습니다 – anthomaxcool

+0

('empty_t ree'는 나무가 아닌 함수입니다.) 어쩌면 출력을 전혀 얻지 못할 수도 있습니다. 만약 당신이 이것을 실행하면 : print_string "testing 1 2 3 \ n"; 플러시 표준 출력'? 다른 쪽 코멘트로''\ n "'으로 끝내면 출력물을보기가 더 쉽습니다. 그렇지 않으면 잃어 버릴 수 있습니다. –