基本的f#错误 - 模式匹配意味着错误的类型

Chr*_*sCa 2 f#

以下代码采用2个参数.第一个是三元组列表:三元组(d,m,y)表示日期.

第二个是一个月的整数

该代码用于计算列表中该月份的日期出现次数

ps我想这可能看起来像是一个家庭作业问题 - 事实并非如此.这是我今年早些时候在ML中所做的一个课程,我正在尝试重做f#中的所有练习.所以这只是为了我的利益

let rec number_in_month (dates : (int * int * int) list, month) =  
    match dates with
    | [] -> 0
    | (_,y,_) when month = y -> 1 + number_in_month(dates.Tail, month)
    | _ -> number_in_month(dates.Tail, month)
Run Code Online (Sandbox Code Playgroud)

但它给出了错误:

该表达式应该具有类型(int*int*int)列表,但这里有类型'a*'b*'c

知道我做错了什么吗?

Mar*_*son 10

您的第二个模式匹配是尝试匹配单个日期,(_,y,_)但它与您的日期列表匹配.请尝试使用匹配(_,y,_)::_.

更惯用的是匹配使用(_,y,_)::tailtail代替dates.Tail以后在表达式中使用.