我构造了一个相互递归的类型,由更多的原始类型组成,也定义如下:
type Title = Title of string;;
type Value = Value of int;;
type Subcol = Collection list
and Collection =
| Col of Title * Value * Subcol
;;
subcol 可能是也可能不是空列表,但如果不是,我想将给定集合的值以及对 Subcol 的递归调用和它可能包含的 Value defs 相加。为此,我构建了以下函数:
let rec colList = function
| [] -> 0
| _::v::s -> (colList s) + sumVal v
and sumVal = function
| Value v -> v
and col = function
| Col(_,v,[]) -> (sumVal v)
| Col(_,v,s) -> (sumVal v) + (colList s)
;;
我希望函数调用 colList s
Col(_,i,s) -> (sumVal i) + (colList s)
从 Subcol 类型生成 int ,但是我收到以下错误:
错误 FS0001:类型不匹配。需要一个值列表但给定一个子列类型“值”与类型“集合”不匹配
我希望 colList 接受 Subcols,而不是 Value 列表。
任何帮助表示赞赏,谢谢。