我正在编写一个程序,该程序应该计算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行:(List.length list_of_children)+ 1 + help list_of_children 在)。
任何想法我的代码有什么问题?
答案 0 :(得分:2)
我看到的第一个问题是:
let (_,list_of_children) = node in
据推测,node
属于'a tree
类型。因此它看起来像Node (value, children)
。但是这行代码将其视为一对通用的OCaml值(a, b)
。这样做会有所帮助:
let Node (_,list_of_children) = node in
有更简洁的方法来写这个,但它应该有助于取得一点进展。毫无疑问,还有其他(可能类似的)问题。