【发布时间】:2016-05-20 00:19:38
【问题描述】:
我正在编写一个程序,该程序应计算 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 * 'a list) 列表的表达式
(第 10 行:(List.length list_of_children) + 1 + help list_of_children 中)。
你知道我的代码有什么问题吗?
【问题讨论】:
-
你应该学习和使用
List.fold_left。我建议使用List.fold_left重新实现List.length,然后对其进行修改以解决您的问题。