2014-03-04 2 views
0

SML의 프로그래밍 언어 클래스에 대한 간단한 연습을하고 있습니다. 연습은 트리의 균형이 맞는지 아닌지 계산하는 것입니다.SML의 패턴 패턴 일치

stdIn:98.42-98.54 Error: operator and operand don't agree [tycon mismatch] 
    operator domain: IntTree 
    operand:   IntTree * IntTree 
    in expression: 
    balanced n1 
stdIn:98.63-98.75 Error: operator and operand don't agree [tycon mismatch] 
    operator domain: IntTree 
    operand:   IntTree * IntTree 
    in expression: 
    balanced n2 

그러나 NODE 유형 IntTree이어야한다 : 나는 다음과 같은 오류가 인터프리터에서 이것을 실행하려고 할 때

datatype IntTree = LEAF of int | NODE of (IntTree * IntTree); 

fun balanced (LEAF l) = true 
    | balanced (NODE (LEAF l, NODE n)) = false 
    | balanced (NODE (NODE n1, NODE n2)) = balanced(n1) andalso balanced(n2) 
    | balanced (NODE (NODE n, LEAF l)) = false 
    | balanced (NODE (LEAF l1, LEAF l2)) = true; 

: 다음 코드는 내가 올바른 해결책이 될 것이라고 생각 것입니다 왜이 기능이 작동하지 않습니까?

답변

3

나는 바로 지금 SML 컴파일러가없는, 그래서이 테스트를하지만, balanced(n2))와 같은 (balanced (NODE n1)) (에 balanced(n1)을 변경하려고 할 수 없습니다.