SML中的类型模式匹配
我正在为SML中的一个编程语言类做一个简单的练习,练习是计算一棵树是否平衡。以下代码是我认为有效的解决方案:SML中的类型模式匹配,sml,Sml,我正在为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) and
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
类型,为什么不工作呢 我现在没有SML编译器,所以我无法测试它,但尝试将balanced(n1)
更改为(balanced(NODE n1))
(与balanced(n2)相同)
我现在没有SML编译器,所以我无法测试它,但尝试将balanced(n1)
更改为(balanced(NODE n1))
(与balanced(n2)相同)
我现在没有SML编译器,所以我无法测试它,但是尝试将balanced(n1)
更改为(balanced(NODE n1))
(与balanced(n2)相同)
我现在没有SML编译器,所以我无法测试,但尝试将balanced(n1)
更改为(平衡(节点n1))
(与平衡(n2)相同)