0

我构造了一个相互递归的类型,由更多的原始类型组成,也定义如下:

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 列表。

任何帮助表示赞赏,谢谢。

4

0 回答 0