2014-03-04 69 views
0

我正在为SML中的Programming Languages类做简单的练习,练习是计算树是否平衡。下面的代码是什么,我认为将是一个有效的解决方案:SML中的类型模式匹配

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; 

然而,当我尝试解释我碰到下面的错误运行此:

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类型,为什么不工作?

回答

3

我没有一个SML编译器现在,所以我不能对此进行测试,但尝试改变balanced(n1)(balanced (NODE n1))(同样与balanced(n2))