我写了一个函数,对二进制树中的所有元素求和:
type 'a tree = Leaf of 'a | Node of 'a tree * 'a * 'a tree;;
let rec sum_tree tree = match tree with
| Leaf l -> l
| a -> a
| Node(tree t1, a, tree t2) -> sum_tree t1 + sum_tree a + sum_tree t2;;
然而,当我试图编译这段代码时,我遇到了一个语法错误:
let rec sum_tree tree = match tree with
| Leaf l -> l
| a -> a
| Node**(**tree **t1**, a, tree t2) -> sum_tree t1 + sum_tree a + sum_tree t2;;
Syntax error: ')' expected, the highlighted '(' might be unmatched
这个代码出了什么问题?
您有这样的模式:
Node(tree t1, a, tree t2)
但是没有a b
形式的模式,所以tree t1
作为子模式是没有意义的。目前还不清楚你想用这种模式做什么。无论如何,这就是导致语法错误的原因。
很可能你只是想写这个:
Node (t1, a, t2)
现在有3个子模式将与节点的三个子部分相匹配。