以ocaml计算树中节点的数量

时间:2016-02-09 20:43:28

标签: tree ocaml

我正在编写一个程序,该程序应该计算ocaml中给定树中的节点数。

type 'a tree = Node of 'a * 'a tree list

let count tree = 
    let rec visit node =
      let (_,list_of_children) = node in
      let rec help list1 = 
        match list1 with 
        | [] -> 0
        | h::t -> (help t) + (visit h)  in
     (List.length list_of_children) + 1 + help list_of_children in
    visit tree

但是,代码不起作用。以下是编译器所说的内容:

  

文件“liscie5.ml”,第10行,字符44-60:错误:此表达式   有类型'列表          但是表达式需要类型('b *'列表)列表

     

(第10行:(Li​​st.length list_of_children)+ 1 + help list_of_children   在)。

任何想法我的代码有什么问题?

1 个答案:

答案 0 :(得分:2)

我看到的第一个问题是:

let (_,list_of_children) = node in

据推测,node属于'a tree类型。因此它看起来像Node (value, children)。但是这行代码将其视为一对通用的OCaml值(a, b)。这样做会有所帮助:

let Node (_,list_of_children) = node in

有更简洁的方法来写这个,但它应该有助于取得一点进展。毫无疑问,还有其他(可能类似的)问题。