相互递归提取和求和元组

时间:2015-10-29 18:30:43

标签: f# functional-programming mutual-recursion

我构建了一个互相递归类型,由更多原始类型组成,类型如下:

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
Col(_,i,s)  -> (sumVal i) + (colList s)

从Subcol类型生成int,但是我收到以下错误:

  

错误FS0001:类型不匹配。期待一个       值列表但给出了一个       Subcol“Value”类型与“Collection”类型

不匹配

我希望colList接受Subcols,而不是Value list。

感谢任何帮助,谢谢。

0 个答案:

没有答案